关于多线程的基本问题

时间:2011-09-23 06:02:39

标签: multithreading

例如我有一个资源锁。 所以多线程函数在访问资源之前检查它是否已设置,如果它没有设置它

在检查和设置之间是否存在极小的可能性,另一个线程会设置相同的锁?

3 个答案:

答案 0 :(得分:3)

是的,有这种可能性。您可以结帐double-checked locking

答案 1 :(得分:1)

取决于您希望它如何工作。阅读mutex_lock的手册页。在这种情况下检查是否设置了锁是多余的,因为设置互斥锁的行为会暂停线程,直到互斥锁可用(因此任何类型的if(resource_unavailable) { wait for availability }代码变得不必要)。

答案 2 :(得分:1)

您不先检查锁的状态然后再获取它。你所做的就是获取它,指明你不想阻止或等待它。如果锁由另一个线程持有,则调用将立即失败。 “lock acquire”调用是作为原子操作实现的。

许多实现提供了一个特定的tryLock()函数,可以实现我上面描述的内容。