Mutex Locks与Peterson的算法?

时间:2016-12-20 09:10:31

标签: java c++ multithreading operating-system locking

互斥锁确保有限的等待条件吗?是否有可能两个线程试图获得一个锁,但只有一个进程(只是运气)一次又一次地得到它。由于彼得森的算法确保有限等待,使用它而不是互斥锁更好吗?

2 个答案:

答案 0 :(得分:2)

有可能对mutices进行无限制的等待,如果例如锁定尝试继续进入互斥锁,至少在C ++ std :: mutex中没有保证首先获得。

然而,这不应该成为一个问题 - 除非你有一些锁定,许多线程一直锁定(甚至在这种情况下,它不太可能导致一些饥饿情况)。

最好的办法是始终使用标准库锁定机制,而不是编写自己的突变。

答案 1 :(得分:1)

Mutex与"有限的等待条件"有时被称为公平。正如上面正确提到的gbehar,C ++标准并没有为std :: mutex定义公平性。如果你真的需要公平的互斥,你可以看看英特尔TBB,其中某些类型的公平性得到保证。我想要记住,公平性并非没有开销。

有关详细信息,请参阅https://www.threadingbuildingblocks.org/docs/help/tbb_userguide/Mutex_Flavors.html