首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pthread_cancel在使用互斥条件变量时

pthread_cancel在使用互斥条件变量时
EN

Stack Overflow用户
提问于 2014-06-21 09:21:00
回答 3查看 3.9K关注 0票数 3

你好,我有一个关于取消使用互斥和条件变量的线程的问题。线程的取消类型延迟。当我只使用p线程_mutex_lock/ pthread_cond_wait函数和一个取消请求到达时,线程的取消点仅为pthread_cond_wait。它能锁上互斥锁吗?我不确定,如果线程总是离开互斥解锁。或者p线程_mutex_lock/unlock函数也是取消点吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-21 09:40:38

我怀疑我能不能比文献资料更好地表达这一点

条件等待(无论是否定时)是取消点。当线程的可取消类型设置为PTHREAD_CANCEL_DEFERRED时,在等待条件下执行取消请求的副作用是在调用第一个取消清理处理程序之前重新获取互斥对象。其效果是线程被解除阻塞,允许执行到从调用pthread_cond_timedwait()或pthread_cond_wait()返回的点,但此时会注意到取消请求,而不是返回到pthread_cond_timedwait()或pthread_cond_wait()的调用者,而是启动线程取消活动,包括调用取消清理处理程序。

另外,请确保您知道其他函数也是取消点函数。

票数 4
EN

Stack Overflow用户

发布于 2017-10-04 23:49:41

如果有多个线程在等待pthread_cond_wait,并且在使用pthread_cond_broadcastpthread_cond_signal发送某种广播之前调用了pthread_cancel,那么可能会导致死锁,其中pthread_cond_wait正在等待线程取消,而线程正在等待pthread_cond_wait出现。

票数 0
EN

Stack Overflow用户

发布于 2020-10-20 08:48:32

根据“Linux编程接口”这本书第667-678页,互斥锁将被锁定。所以你可以用

代码语言:javascript
复制
pthread_mutex_lock(&mutex);
pthread_cleanup_push((void (*)(void *))pthread_mutex_unlock, &mutex);
while (var == 0)) {
    pthread_cond_wait(&cond, &mutex);
}
pthread_cleanup_pop(1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24340194

复制
相关文章

相似问题

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