linux c 多个线程同时获取同一个锁,如何处理的

huazi_715 2019-02-20 03:41:32
自旋锁也好,互斥锁也罢,信号量等,当ABCD四个线程同时等待获取锁S,当锁S被释放后,线程ABCD谁能获取到锁S,假设ABCD按照顺序发出申请锁S的?
如果现在linux c 没有保证按照顺序获取锁。极端情况下,ACD总能获取锁,而B永远都获取不到,那岂不是bug?
...全文
1983 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tq1086 2019-05-31
  • 打赏
  • 举报
回复
这个就是所谓的“公平性”问题。具体情况要看锁的实现方式。如果采用FIFO调度,就不会出现线程饿死的情况。
weixin_42792246 2019-05-07
  • 打赏
  • 举报
回复
非要这么设计的话 加个调度判断吧 优先级一样的话就轮流取锁 优先级不一样按搞得来 就几个if else的事
xh.wang 2019-04-28
  • 打赏
  • 举报
回复
确实有这个可能呀,可是你为什么不去规避掉呢?而且概率低。。。再者,有4个线程去等待一个锁,那么是不是可以考虑本身这就是一个设计缺陷,尽量2个,能少就少。少给自己挖坑呀大兄弟
636f6c696e 2019-04-18
  • 打赏
  • 举报
回复
linux实际是可能存在这种情况的,只是说ABCD均衡去获取锁的话,有一个人长时间获取不到的概率比较低。
g_u_o_jianhui 2019-03-26
  • 打赏
  • 举报
回复
这个只能说明您设计的线程有问题,优先级一样的情况下,每个线程执行的概率应该是对等的,不存在有不执行的线程,除非是ACD优先级高于B,而且ACD线程中不存在延时,才会导致b得不到执行。
蚊子点水 2019-03-02
  • 打赏
  • 举报
回复
公平锁,这不都看CPU怎么调度的么
zy1306 2019-02-27
  • 打赏
  • 举报
回复
互斥锁和信号量不太可能出现你说情况,建议贴出代码及测试方法。自旋锁是很有可能的。
huazi_715 2019-02-21
  • 打赏
  • 举报
回复
看来论坛缺少发言的高手啊。。。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧