例如我有一个资源锁。 所以多线程函数在访问资源之前检查它是否已设置,如果它没有设置它
在检查和设置之间是否存在极小的可能性,另一个线程会设置相同的锁?
答案 0 :(得分:3)
是的,有这种可能性。您可以结帐double-checked locking。
答案 1 :(得分:1)
取决于您希望它如何工作。阅读mutex_lock的手册页。在这种情况下检查是否设置了锁是多余的,因为设置互斥锁的行为会暂停线程,直到互斥锁可用(因此任何类型的if(resource_unavailable) { wait for availability }
代码变得不必要)。
答案 2 :(得分:1)
您不先检查锁的状态然后再获取它。你所做的就是获取它,指明你不想阻止或等待它。如果锁由另一个线程持有,则调用将立即失败。 “lock acquire”调用是作为原子操作实现的。
许多实现提供了一个特定的tryLock()
函数,可以实现我上面描述的内容。