mirror of
https://github.com/llvm/llvm-project.git
synced 2025-05-14 12:26:08 +00:00
51 lines
794 B
C++
51 lines
794 B
C++
![]() |
#include <condition_variable>
|
||
|
#include <mutex>
|
||
|
#include <thread>
|
||
|
|
||
|
std::mutex mutex;
|
||
|
std::condition_variable cond;
|
||
|
|
||
|
void *
|
||
|
thread3(void *input)
|
||
|
{
|
||
|
std::unique_lock<std::mutex> lock(mutex);
|
||
|
cond.notify_all(); // Set break point at this line.
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void *
|
||
|
thread2(void *input)
|
||
|
{
|
||
|
std::unique_lock<std::mutex> lock(mutex);
|
||
|
cond.notify_all();
|
||
|
cond.wait(lock);
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void *
|
||
|
thread1(void *input)
|
||
|
{
|
||
|
std::thread thread_2(thread2, nullptr);
|
||
|
thread_2.join();
|
||
|
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
std::unique_lock<std::mutex> lock(mutex);
|
||
|
|
||
|
std::thread thread_1(thread1, nullptr);
|
||
|
cond.wait(lock);
|
||
|
|
||
|
std::thread thread_3(thread3, nullptr);
|
||
|
cond.wait(lock);
|
||
|
|
||
|
lock.unlock();
|
||
|
|
||
|
thread_1.join();
|
||
|
thread_3.join();
|
||
|
|
||
|
return 0;
|
||
|
}
|