首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >thread_cancel和阻塞函数作为cond_wait

thread_cancel和阻塞函数作为cond_wait
EN

Stack Overflow用户
提问于 2013-03-26 15:36:36
回答 1查看 1.1K关注 0票数 1

我的主进程将pthread_cancel发送到另一个线程,该线程等待cond_wait(&condition)出现条件。在pthread_cancel上,他们说:延迟取消能力意味着取消将被延迟,直到线程下一次调用作为取消点的函数。但这些函数通常是阻塞函数。那么我的问题是,只有在线程解除阻塞(在我的例子中是广播或信号)之后,线程才被取消,或者它会看到我正在取消点上阻塞,然后取消我的线程?

EN

回答 1

Stack Overflow用户

发布于 2013-03-26 17:50:04

我不太熟悉cond_wait,但我认为它来自另一个库,而不是通常使用的pthread_cond_wait

但是是的,如果一个线程在pthread_cond_wait中被阻塞,然后被取消,这个线程将被唤醒,重新获取它的互斥,然后被取消。

因此,在取消在某个条件下被阻塞的线程时,这里有两点需要记住:

  1. 在调用pthread_cancel之前,确保互斥锁被解锁(或者在将来的某个时候被解锁)。例如,如果线程A在等待条件,而线程B锁定条件互斥体,在打开条件互斥锁之前调用pthread_cancel,然后调用pthread_join,那么您将死锁。
  2. 安装一个清理处理程序(请参阅pthread_cleanup_push),在调用pthread_cond_wait之前解除条件互斥锁-否则您将取消线程并使互斥锁。

但是,还要注意的是,p线程条件变量实现有/有一些bug,所以一定要使用最新的glibc。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15641145

复制
相关文章

相似问题

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