gpt4 book ai didi

c++ - 通知前完成手动解锁

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:10 26 4
gpt4 key购买 nike

多亏了 Scott Meyers 医生的书,第 263 页,我最近发现了 condition_variable,所以我不得不搜索它 on 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();

1) 我不明白 cppreference 的作者所说的评论和“等待线程,只会再次阻塞”是什么意思,因为我什至不知道如何翻译它,并且

2) 它准确地表示了哪些线程,特别是为什么。

3) 表示thread_worker还是主线程(父线程)?

4) 他们选择做什么?

如果作者先通知然后手动解锁,会有什么变化?

最佳答案

这是次要且通常不相关的优化。问题的出现是因为在调用 notifynotify_all 之后唤醒的每个线程都必须先锁定互斥体,然后才能继续进行。如果对 unlock 的调用发生在对 notify_one(或对 notify)的调用之后,则唤醒的线程将不得不等待直到调用线程解锁它之后。如果在通知调用之前调用 unlock,则一个被唤醒的线程可以立即获得互斥量。

关于c++ - 通知前完成手动解锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56995611/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com