首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在调用pthread_cond_destroy之前终止/唤醒等待条件变量的所有线程?

如何在调用pthread_cond_destroy之前终止/唤醒等待条件变量的所有线程?
EN

Stack Overflow用户
提问于 2018-11-29 19:53:44
回答 1查看 470关注 0票数 0

当条件变量上有pthread_cond_destroy()线程等待时,我知道调用1+ ()时的未定义行为,我正在寻找一个解决方案,以便在调用pthread_cond_destroy()之前向所有等待条件变量的线程发送唤醒信号。

如果条件变量有效,则我的CV类析构函数调用pthread_cond_destroy()。因此,我想:

  1. 在调用pthread_cond_destroy()之前进行广播,但这只会唤醒一个线程。我希望析构函数成功,并且任何线程都不应该能够等待cv对象(在已销毁的对象上没有取消引用)。
  2. 信号计数(以及解决方法#1)是解决此问题的一种方法吗?如果是这样的话,我如何确保在~CV()成功之前,所有等待线程都已被调度(唤醒)?
  3. 如果使用C++ 11线程/条件变量,是否克服了此问题?
EN

回答 1

Stack Overflow用户

发布于 2018-11-29 23:25:11

我将这样做(假设您想要销毁条件变量,因为您正在清理并希望线程退出;如果您不希望线程退出,那么就不应该销毁它们使用的条件变量):

  1. 设置一个布尔标志(或其他什么),指示您希望所有线程都消失。
  2. 调用pthread_cond_broadcast()唤醒所有线程(以便它们能够检查标志,查看是否设置了标志,并通过干净退出响应)
  3. 在每个线程上调用pthread_join(),这样您就会知道它们都消失了,因此继续下一步是安全的
  4. 调用pthread_cond_destroy()来销毁条件变量(现在可以安全地执行,因为您知道没有线程使用它,因为它们都是在步骤3完成之前退出的)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53546583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档