從我所瞭解的互斥鎖 - 它們通常提供對共享資源的鎖定功能。因此,如果一個新線程想要訪問這個鎖定的共享資源 - 它要麼退出,要麼不斷輪詢鎖(並在等待鎖時浪費處理器週期)。互斥鎖與監視器 - 比較
但是,監視器具有條件變量,它爲等待線程提供了一種更異步的方式 - 將它們放在等待隊列中,從而不會使它們消耗處理器週期。
這是監視器比互斥鎖(或沒有條件變量的任何常規鎖定機制)的唯一好處嗎?
從我所瞭解的互斥鎖 - 它們通常提供對共享資源的鎖定功能。因此,如果一個新線程想要訪問這個鎖定的共享資源 - 它要麼退出,要麼不斷輪詢鎖(並在等待鎖時浪費處理器週期)。互斥鎖與監視器 - 比較
但是,監視器具有條件變量,它爲等待線程提供了一種更異步的方式 - 將它們放在等待隊列中,從而不會使它們消耗處理器週期。
這是監視器比互斥鎖(或沒有條件變量的任何常規鎖定機制)的唯一好處嗎?
互斥鎖是低層構造。它們只是提供互斥和內存可視性/排序。另一方面,監視器的級別更高 - 它們允許線程等待應用程序特定的條件。因此,在某些情況下,監視器只是簡單地鎖定/解鎖,但在大多數情況下,單獨使用單獨的遠遠不夠 - 因此您可以看到它們與一個或多個條件變量一起使用 - 概念上使用等效顯示器。
我認爲,當一個互斥鎖的過程的監控鎖定的對象(多線程不能同時訪問該對象。) (多線程只能有一個經過的過程。)
這是準確?據我所知,目前所有的操作系統都把互斥操作放到了一個等待隊列中。他們不是投票。 –
@ZanLynx:如果沒有,我不會看到使用監視器優於互斥鎖。 – Hari