pthread 的坑

本文通过分析一个嵌入式Linux系统中pthread_create创建线程时遇到的问题,揭示了在互斥锁中使用休眠函数可能导致的调度延迟。文中详细解释了互斥锁的工作原理,并提供了实例测试,强调加锁位置的重要性,以及如何修正问题以避免系统性能下降。
摘要由CSDN通过智能技术生成

为什么写这篇文章?

嵌入式Linux:pthread_create 记录线程使用​zhuanlan.zhihu.com

这是上篇文章使用了pthread_create来实现闪烁led灯,因为代码写的有偏差导致了一个问题,就是不能进入深度休眠

 

问题产生原因

先了解下互斥锁

线程之间可以共享内存空间,这意味着不同线程可以访问内存中的同一个变量。然而不同线程在同一时间修改一个内存对象会造成一些不可预知的结果。

为了避免意外,我们需要用到pthread里一个非常重要的数据结构 —— 互斥对象(mutex)。互斥对象在使用时结合互斥锁使用,pthread_mutex_lock 和 pthread_mutex_unlock。

互斥锁是这样工作的:线程B锁定了一个互斥对象(mymutex),如果线程A也试图锁定该互斥对象(mymutex)时,线程A就进入休眠状态。一旦线程B释放了互斥对象(调用 pthread_mutex_unlock()) ,线程A 就能够锁定这个互斥对象(换句话说,线程A就将从 pthread_mutex_lock() 函数调用中返回,同时互斥对象被重新锁定)。同样地,当线程A正锁定互斥对象时,如果线程C试图锁定互斥对象的话,线程C也将临时进入睡眠状态。

pthread_mu
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值