请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,具体任务如下: 创建自定义线程,实现求第num项斐波那契数列的值num从0开始,并且在main函数中获取子线程最终计算的结果。
时间: 2023-11-20 16:06:13 浏览: 161
PL/SQL 创建 oracle 任务调度
以下是代码实现:
```c++
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx;
void fibonacci(int num, int& result) {
int a = 0, b = 1;
if (num == 0)
result = a;
else if (num == 1)
result = b;
else {
for (int i = 2; i <= num; ++i) {
result = a + b;
a = b;
b = result;
}
}
mtx.lock();
cout << "子线程计算第" << num << "项斐波那契数列的结果为:" << result << endl;
mtx.unlock();
}
int main() {
int num = 10;
int result = 0;
thread t(fibonacci, num, ref(result));
t.join();
cout << "主线程获取子线程计算的结果为:" << result << endl;
return 0;
}
```
在上面的代码中,我们创建了一个名为fibonacci的函数作为子线程,该函数接收一个整数num和一个整数引用result。在函数中,我们使用循环计算斐波那契数列的第num项,并将结果存储在result中。需要注意的是,我们使用了互斥锁来保证线程安全,因为多个线程可能同时访问和修改result。
在主函数中,我们创建了一个线程t,将fibonacci函数作为参数传递,并将num和result的引用传递给子线程。然后我们调用join方法,等待子线程完成任务。
最后,我们在主线程中输出result的值,以证明子线程已经完成了计算任务。
阅读全文