2015-07-11 76 views
0

我是新來的併發編程。當我正在瀏覽同步,線程安全集合,原子包裝類,鎖之間的混淆時, 鎖和同步通過使一段代碼線程安全來完成相同的工作。爲什麼我們需要線程安全的集合或原子包裝類呢?由於鎖定將只允許單個線程訪問代碼,並且不會讓集合或基元類型變得不安全。同步vs線程安全集合vs原子包裝類vs鎖

回答

2

這是一個非常廣泛的問題,你問。問題是,並非所有這些東西都有單一嚴格的定義。例如,線程安全集合可能使用各種形式的同步(如鎖或原子操作)來實現線程安全。但是,甚至連「線程安全」這個術語都沒有明確定義!

然而,有一件事你錯了肯定:同步是我們的目標,而鎖,互斥體,原子能等都是手段來實現這一目標。同步意味着不同的線程以同步的方式訪問資源。換句話說,他們協調訪問,以便它們不會互相影響。順便說一句:我在這裏談論線程,但不同的實體也可能是進程或甚至不同的計算機,但讓我們先保持簡單。

現在,你問使用「線程安全的集合或原子包裝類」,爲什麼他們都需要在所有。答案很簡單,這些東西在更高的層次上提供了不同的接口或服務。例如,當我有一個連接兩個線程的FIFO時,它們如何同步對底層隊列的訪問並不重要。如果兩個線程的接口已正確實現,則可以獲得一定的保證。用鎖來手動執行操作是可能的,但是很複雜,因此除了低級原語之外,將它們提供爲高級構建塊只會使軟件開發更容易,結果更可靠。

最後一個提醒的其他問題:如開頭所提到的,並不是所有的條款都與他們相關的普遍意義。因此,如果您提供了其他信息,特別是您打算使用的編程語言,它將有所幫助。

+0

謝謝@Ulrich ..語言是java ...的解釋是非常好的和描述性的 –

2

因爲使用同步時需要小心。如果你濫用它,你可能會遇到性能問題。如果可能,使用線程安全集合通常對性能更好,並確保沒有錯誤或死鎖。