QMutex
在关于它的Qt 文档中说:
(...) 当您在一个线程中调用 lock() 时,其他尝试在同一位置调用 lock() 的线程将阻塞,直到获得锁的线程调用 unlock()。lock() 的非阻塞替代方法是 tryLock()。(...)
我已经多次使用此代码:
QMutex mutex;<br>
while( !mutex.tryLock() );
有人可以解释一下这个tryLock()
方法是如何构建的,while()
循环不会挂起整个程序吗?
两个线程共享一个QMutex
并充当通信 FIFO - 当一个线程正在发送数据,而另一个数据被调度到第二个线程时,该线程正在等待第一个线程完成。通讯符合 Modbus 标准 - send1-receive1、send2-receive2。
您不能进行并行发送和接收。所以总是一个线程处于活动状态,其余的正在等待。
QMutex mutex;
thread1() {
while( !mutex.tryLock() )
;
doThread1Job();
}
thread2() {
while( !mutex.tryLock() )
;
doThread2Job();
}