4 c++ multithreading condition-variable c++11
是否可以使用单个条件变量进行双向同步(即在同一条件变量的不同时间等待两个不同的条件)?我确信在任何时候只有一个线程会在条件变量上等待.下面的示例代码说明了我在想什么:
#include <condition_variable>
#include <thread>
#include <mutex>
#include <iostream>
std::condition_variable condvar;
std::mutex mutex;
int i;
void even()
{
while (i < 10000) {
std::unique_lock<std::mutex> lock(mutex);
if (i % 2 != 0) {
condvar.notify_one();
condvar.wait(lock, [&](){ return i % 2 == 0; });
}
i++;
std::cout << i << std::endl;
}
condvar.notify_one();
}
void odd()
{
while (i < 10001) {
std::unique_lock<std::mutex> lock(mutex);
if (i % 2 != 1) {
condvar.notify_one();
condvar.wait(lock, [&](){ return i % 2 == 1; });
}
i++;
std::cout << i << std::endl;
}
}
int main()
{
i = 0;
std::thread a(even);
std::thread b(odd);
a.join();
b.join();
}
Run Code Online (Sandbox Code Playgroud)
是的,这是非常安全的.但是,notify_one当你真正想要通知所有等待条件的线程时,我不会养成调用的习惯,即使你"知道"只有一个线程会等待.
| 归档时间: |
|
| 查看次数: |
579 次 |
| 最近记录: |