gpt4 book ai didi

c++ - std::notify_all_at_thread_exit 是如何工作的?

转载 作者:搜寻专家 更新时间:2023-10-31 02:05:23 25 4
gpt4 key购买 nike

根据 cppref :

std::notify_all_at_thread_exit provides a mechanism to notify other threads that a given thread has completely finished, including destroying all thread_local objects.

我知道 std::notify_all_at_thread_exit 的确切语义。让我不解的是:

如何注册在给定线程完成并销毁其所有线程局部对象后调用的回调函数?

最佳答案

std::notify_all_at_thread_exit 通过引用在其第一个参数中采用条件变量。当线程退出时,它将对该条件变量调用notify_all,唤醒等待条件变量被通知的线程。

似乎没有直接的方法来真正为此注册回调;你可能需要有一个线程等待条件变量被通知(使用与传递到 std::notify_all_at_thread_exit 的锁相同的锁)。当 CV 被通知时,正在等待的线程应该验证唤醒不是虚假的,然后执行应该运行的所需代码。

有关如何实现的更多信息:
至少在 Google's libcxx , std::notify_all_at_thread_exit电话 __thread_struct_imp::notify_all_at_thread_exit ,它将带有参数的对存储到 vector (_Notify)。线程死亡后,destructor __thread_struct_imp 迭代这个 vector 并通知所有以这种方式注册的条件变量。

与此同时,GNU stdc++ 使用类似的方法:创建一个 notifier 对象,将其注册到 __at_thread_exit,它被设计为在线程退出时调用其析构函数,并且析构函数实际上执行通知过程。我需要更仔细地调查 __at_thread_exit,因为我还没有完全理解它的内部工作原理。

关于c++ - std::notify_all_at_thread_exit 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52138149/

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