// condition_variable example
#include // std::cout
#include // std::thread
#include // std::mutex, std::unique_lock
#include // std::condition_variable
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void print_id (int id) {
std::unique_lock lck(mtx);// equivalent to mtx.lock();
while (!ready) cv.wait(lck);//waiting for notification
// ...
std::cout << "thread " << id << '\n';
}//// <---- brace="" equivalent="" however="" leave="" mtx.unlock="" span="" this="" to="" you="">---->
void go() {
std::unique_lock lck(mtx);
ready = true;
cv.notify_all();//notify to all threads who is waiting
}
int main ()
{
std::thread threads[10];
// spawn 10 threads:
for (int i=0; i<10 i="" kbd="" print_id="" std::cout="" std::thread="" style="color: #600030; font-style: normal;" threads="">"10 threads ready to race...\n"10>
;
go(); // go!
for (auto& th : threads) th.join();
return 0;
}
Monday, 18 June 2018
Mutex, condition varaible
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment