Dev*_*Dev 6 c++ multithreading
多亏了Scott Meyers医生的书,第263页,我最近发现了condition_variable,所以我不得不按cppreference搜索它,以进行更多研究。
https://en.cppreference.com/w/cpp/thread/condition_variable
我对此有几个问题,因为我已经思考了好几天,但我仍然不明白。
我的问题是关于这段代码的:
// Manual unlocking is done before notifying, to avoid waking up
// the waiting thread only to block again (see notify_one for details)
lk.unlock();
cv.notify_one();
Run Code Online (Sandbox Code Playgroud)
1)我不了解cppreference的作者通过该注释和“等待中的线程,只能再次阻止”的含义,因为我什至都不知道如何翻译它,并且
2)它确切地表示哪个线程,特别是为什么。
3)它表示thread_worker还是主线程(父线程)?
4)他们选择这样做吗?
如果作者先通知然后手动解锁,那会发生什么变化?
这是次要的,通常是不相关的优化。引起关注的原因是,每个线程在调用互斥对象之后被唤醒notify或notify_all必须锁定互斥对象之后才能继续进行。如果unlock对notify_one(或notify)的调用之后发生,则唤醒的线程将不得不等待,直到调用线程将其解锁。如果对的调用unlock是在通知调用之前进行的,则一个唤醒的线程可以立即获取互斥体。
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |