I'm very confused with std::thread and std::async. Here is my code:
#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();
}
What I want to do is very simple. We have two threads which should run in parallel (i.e. they don't have to wait on each other). However, thread t1 is supposed to change its behaviour if thread t2 puts some integer in a shared vector. Does the code given above achieve this, or should we use std::async, std::future, etc?