linux多线程编程--信号量和条件变量 唤醒丢失事件

本文探讨了在Linux多线程编程中,使用信号量和条件变量时可能出现的唤醒丢失问题。当在未获得互斥锁的线程中调用`pthread_cond_signal`或`pthread_cond_broadcast`时,可能会导致唤醒丢失。这种情况通常发生在特定的同步场景下。通过示例代码展示了条件变量的使用,并指出使用信号量能避免这种问题,因为内核会记录信号的存在。文章提出可以通过调整初始化信号量来实现条件变量的功能,以此避免唤醒丢失。
摘要由CSDN通过智能技术生成
       关于linux下信号量和条件变量的使用,在很多地方都可以找到相关文章,信号量、条件变量、互斥锁都是线程同步原语,在平时多线程编程中只要知道一两种就可以轻松搞定,我也是这么认为的,但是今天发现,有时还是有区别的。

      在实现多线程编程中,其中有些东西是可以互相转换的,比如使用信号量可以实现条件变量,关于这三者的基本用法不在累述,我的博客中也有相关介绍,这里介绍条件变量丢失唤醒事件的事情。

    在线程未获得相应的互斥锁时调用pthread_cond_signal或pthread_cond_broadcast函数可能会引起唤醒丢失问题。

 

唤醒丢失往往会在下面的情况下发生:

 

1、一个线程调用pthread_cond_signal或pthread_cond_broadcast函数;

 

2、另一个线程正处在测试条件变量和调用pthread_cond_wait函数之间;

3、没有线程正在处在阻塞等待的状态下。

 

下面是使用函数pthread_cond_wait()和函数pthread_cond_signal()的一个简单的例子:

 

pthread_mutex_t count_lock;

pthread_cond_t count_nonzero;
unsigned count;
decrement_count () {
pthread_mutex_lock (&count_lock);
while(count==0)
pthread_cond_wait( &count_nonzero,&count_lock);
count=count -1;
pthread_mutex_unlo
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值