回复: QT多线程互斥变量是否有支持自旋锁的功能?
#6 回 realfan 的帖子 [wwwfffhhh 05-12 08:51]
realfan:自旋锁,可以用C++自己写一个,网上也很多。
#include
class SpinLock {
public:
....... (2021-05-10 17:15)
虽然上方的程序线程会等待释放“锁”,但它是死循环等待,如果其它线程可能会花一段时间才会释放”锁“,那么这个CPU利用率就非常高,程序性能反而可能变得很差。
我希望的是线程只会等待少量时间(即可以设置自旋循环等待一定的次数),如果超过这个次数就线程休眠了
#7 回 wwwfffhhh 的帖子 [realfan 05-12 10:05]
wwwfffhhh:虽然上方的程序线程会等待释放“锁”,但它是死循环等待,如果其它线程可能会花一段时间才会释放”锁“,那么这个CPU利用率就非常高,程序性能反而可能变得很差。
我希望的是线程只会等待少量时间(即可以设置自旋循环等待一定的次数),如果超过这个次数就线程休眠了 (2021-05-12 08:51)
自旋锁应用场景,就是在等待时间很短的情形。否则就用普通锁。可以考虑用混合锁,先自旋一定时间,未取得,再进入互斥休眠。
#8 回 realfan 的帖子 [wwwfffhhh 05-13 20:40]
realfan:自旋锁应用场景,就是在等待时间很短的情形。否则就用普通锁。可以考虑用混合锁,先自旋一定时间,未取得,再进入互斥休眠。 (2021-05-12 10:05)
你说得很对,但我现在就是没有找到“再进入互斥休眠”的代码程序
#9 回 wwwfffhhh 的帖子 [realfan 05-14 14:06]
wwwfffhhh:你说得很对,但我现在就是没有找到“再进入互斥休眠”的代码程序 (2021-05-13 20:40)
我见过有用std::mutex 先try_lock一定次数,或一定时间的,如果仍然未成功,再调用lock
但这种方式,效率如何,还是需要验证
#10 [deepgui 05-16 23:09]
如果程序用线程有互锁问题,是程序设计问题。很多是逻辑问题,最好是从逻辑上去解决。