65,208
社区成员
发帖
与我相关
我的任务
分享#include <condition_variable>
#include <iostream>
#include <mutex>
#include <thread>
namespace {
const size_t kRotationCount = 5;
std::mutex mtx;
bool should_turn_to_sub = true;
std::condition_variable cond;
} // namespace
void RunSubThread() {
for (size_t i = 0; i < kRotationCount; ++i) {
std::unique_lock<std::mutex> lock(mtx);
cond.wait(lock, []{return should_turn_to_sub;});
std::cout << "The sub thread is running." << std::endl;
should_turn_to_sub = false;
cond.notify_one();
}
}
void RunMainThread() {
for (size_t i = 0; i < kRotationCount; ++i) {
std::unique_lock<std::mutex> lock(mtx);
cond.wait(lock, []{return !should_turn_to_sub;});
std::cout << "The main thread is running." << std::endl;
should_turn_to_sub = true;
cond.notify_one();
}
}
int main(int argc, char* argv[]) {
std::thread(RunSubThread).detach();
RunMainThread();
}