【发布时间】:2015-10-18 23:09:45
【问题描述】:
我正在尝试使用两个线程打印从 1 到 n 的数字。一个用于递增,另一个用于打印。由于新 c++ 中没有标准库信号量类,因此我使用互斥锁和条件变量来模拟二进制信号量来完成这项工作。下面的代码不打印任何值,但“main is here!”。我检查了我的代码几次,但找不到解决方案。我在这里错过了什么吗?
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
using namespace std;
mutex m;
condition_variable cv;
int v=0;
void modify()
{
while(v<10)
{
lock_guard<mutex> lock(m);
v=v+1;
cv.notify_all();
}
}
void print()
{
while(v<10)
{
unique_lock<mutex> lock(m);
cv.wait(lock);
cout<<v<<" ";
lock.unlock();
cv.notify_all();
}
}
int main() {
thread t1(modify);
thread t2(print);
t1.join();
t2.join();
cout<<endl<<"main is here!"<<endl;
return 0;
}
【问题讨论】:
标签: multithreading mutex semaphore c++14