2011-03-11 104 views
7

我一直在閱讀一些關於ruby多線程編程的博客。我注意到作者傾向於使用線程安全這個詞。這是什麼意思?爲什麼編寫線程安全代碼很重要?線程安全是什麼意思?

+3

+1思考你在讀什麼,不是每個人都會:-) – Chris 2011-03-11 09:03:48

回答

7

如果你有一個資源(比如說一本書的全局列表),並且你有兩個運行的線程可以修改這個列表。有很多情況下列表的數據會不一致。

  • (線程A讀取書ANDS顯示其數據)
  • (線程B刪除同一本書,而數據由線程A使用)
  • (線程A現在想要一些信息添加到書)

所以,你必須使你的代碼線程安全,這樣在任何時候只有一個單獨的線程可以有書的名單寫訪問。

SpyrosP提到的死鎖發生在線程A阻止列表寫入並等待線程B在列表中添加數據時。因爲兩個線程都會等待對方做他們不能做的事情。只有在線程安全機制未正確實施的情況下才會發生這種情況。

+1

很好的解釋。 +1我還要補充一點,大部分已準備好的軟件包(如Queue for Python)都基於開箱即用的線程安全機制。 – Spyros 2011-03-11 09:03:02

+0

@SpyroP好點!您會發現許多編程語言中已有的線程安全數據結構。我很確定ruby的一些列表和地圖也關心這一點。 – Chris 2011-03-11 09:12:24