当前位置: 技术问答>linux和unix
互斥锁的一个问题
来源: 互联网 发布时间:2016-06-21
本文导语: 最近开发中遇到一个奇怪的问题—— 线程A1~A16的优先级为80,这16个线程每隔2min获取这个互斥锁进行一小段操作。 同时,还有一个线程B1,优先级为50,偶尔需要获取同一个互斥锁。 现在的问题是,当某个A*线程已...
最近开发中遇到一个奇怪的问题——
线程A1~A16的优先级为80,这16个线程每隔2min获取这个互斥锁进行一小段操作。
同时,还有一个线程B1,优先级为50,偶尔需要获取同一个互斥锁。
现在的问题是,当某个A*线程已经获取了互斥锁,此时线程B1正好也需要获取该互斥锁时,线程B1会一直获取不到,即使在B1获取互斥锁时加入timeout,当超时时间到时,锁定互斥锁竟然不会退出!!!导致我的程序一直“死”在那里。
求解。谢谢
线程A1~A16的优先级为80,这16个线程每隔2min获取这个互斥锁进行一小段操作。
同时,还有一个线程B1,优先级为50,偶尔需要获取同一个互斥锁。
现在的问题是,当某个A*线程已经获取了互斥锁,此时线程B1正好也需要获取该互斥锁时,线程B1会一直获取不到,即使在B1获取互斥锁时加入timeout,当超时时间到时,锁定互斥锁竟然不会退出!!!导致我的程序一直“死”在那里。
求解。谢谢
|
这好像有个名词,叫“优先级反转”。
能不能不要让它们拥有不同的优先级?
能不能不要让它们拥有不同的优先级?
|
不会是你的内核有BUG吧?
|
优先级倒置:在不同优先级的进程访问资源死锁时,将低优先级的进程优先级提高,以获得资源,完成后再将优先级恢复正常。
|
确定么?
linux 在应用层一般采用的是动态调整优先级吧
linux 在应用层一般采用的是动态调整优先级吧