2010-04-27 29 views
11

我聽說選擇使用'synchronized'這個詞來描述互斥語句只是一個錯誤(編輯:'錯誤'在這裏是一個錯誤的選擇,請參閱編輯),但我想知道是否實際上選擇背後有一個原因。爲什麼Java中的synchronized關鍵字稱爲'synchronized'而不是更精確的'mutexed'?

[編輯]

通過Safyan的言論的蠱惑,我想補充的是同步建立線程之間的時序關係的總稱。它可以包括互斥和諸如速率控制之類的東西(例如,兩個線程以相同的速率執行某些操作)。使用'synchronized'意味着互斥,而不是像'mutexed'這樣更具體的關鍵字,這似乎不必要地含糊不清。

+0

可能是一個有用的參考:http://stackoverflow.com/questions/1085709/what-does-synchronized-mean – 2010-04-27 03:43:53

回答

7

這不是一個錯誤。它意味着它所說的;代碼必須與其他線程同步以提供互斥。事實上,同步這個術語可能比「互斥體」更有意義,因爲「互斥體」意味着一種非常特殊的同步原語類型,同步關鍵字可以使用任意數量的線程同步原語實現(測試& set with active投票,信號量等)。

+0

對我來說,'互斥'是'互斥'的常用縮寫,不是一個特定的原始,即使它可能成爲某種特定語言的原語的名稱。 – 2010-04-27 04:14:16

+1

@Edward,在UNIX和Windows中,互斥鎖都是支持鎖定,解鎖和trylock的特定原語。而Java監視器也支持wait和notify,它們是條件變量的一部分。 – 2010-04-27 04:18:17

+0

@Safyan,夠公平的,但不'同步'一般是指建立任務之間的時間關係?互斥可能是一個超載的術語,但它似乎比「同步」更清晰。 – 2010-04-27 04:26:51

0

synchronized關鍵字用於獲取和釋放監視器上的鎖定。像互斥量一樣,監視器用於併發控制,但它們並不相同。

使用同步本身並不是一個錯誤,但它可以是一個低層次的構造與多線程一起使用,不適當的使用可能會很快導致多線程錯誤。

+0

我想你的意思是說,「本身使用同步。」 – 2010-10-27 19:55:59

+0

謝謝,我已修復它。 – mdma 2010-11-04 07:54:43

0

使用synchronized關鍵字而不是互斥鎖實際上是表達該術語的好方法。通過互斥我們不是很清楚,但同步關鍵字本身告訴自己。同步被放置在實際上需要在所有想要訪問該代碼的線程之間進行同步的代碼。這就是爲什麼它被稱爲同步。

相關問題