自旋锁也好,互斥锁也罢,信号量等,当ABCD四个线程同时等待获取锁S,当锁S被释放后,线程ABCD谁能获取到锁S,假设ABCD按照顺序发出申请锁S的?
如果现在linux c 没有保证按照顺序获取锁。极端情况下,ACD总能获取锁,而B永远都获取不到,那岂不是bug?

解决方案 »

  1.   

    公平锁,这不都看CPU怎么调度的么
      

  2.   

    这个只能说明您设计的线程有问题,优先级一样的情况下,每个线程执行的概率应该是对等的,不存在有不执行的线程,除非是ACD优先级高于B,而且ACD线程中不存在延时,才会导致b得不到执行。
      

  3.   

    linux实际是可能存在这种情况的,只是说ABCD均衡去获取锁的话,有一个人长时间获取不到的概率比较低。
      

  4.   

    非要这么设计的话   加个调度判断吧   优先级一样的话就轮流取锁   优先级不一样按搞得来  就几个if else的事
      

  5.   

    这个就是所谓的“公平性”问题。具体情况要看锁的实现方式。如果采用FIFO调度,就不会出现线程饿死的情况。