c++异步线程



我对std::threadstd::async很困惑。下面是我的代码:

#include <vector>
#include <thread>
#include <mutex>
std::vector<int> myvector = {};
std::mutex mu;
int result;
void samplefunc(int a, int& result){
result = 2 * a;
}
void func1(){
while(true){
std::unique_lock locker(mu);
locker.lock();
std::vector<int> temp = myvector;
locker.unlock();
if(myvector.size() > 0){
samplefunc(myvector.at(0),result);
myvector.clear();
}else{
samplefunc(0,result);
}
}
}
void func2(){
while(true){
//do complex things, suppose after complex calculations we have result dummy which is type int
int dummy = 0;
std::unique_lock locker(mu);
locker.lock();
myvector.push_back(dummy);
locker.unlock();
}
}
int main(){
std::thread t1(func1);
std::thread t2(func2);
t1.join();
t2.join();
}

我想做的很简单。我们有两个线程应该并行运行(即它们不必相互等待)。然而,线程t1应该改变其行为,如果线程t2把一些整数在共享向量。上面给出的代码是否可以实现这一点,或者我们应该使用std::async,std::future等?

如果共享数据是正确同步的,那么一个线程对共享数据的修改可以影响在单独线程中使用该数据的计算。但是你还没有充分锁定向量。锁必须包围共享数据上的所有读取步骤。在func1中,您过早地释放了锁。

最新更新