2016-12-30 62 views
0

我經常遇到關鍵術語「線程安全」,並想知道它的含義。例如,在Firebase或Realm中,某些對象被視爲「線程安全」。對於某些線程安全來說究竟意味着什麼?在iOS中線程安全是什麼意思?

+0

請在此處查看關於線程安全性的註釋。相關。 http://stackoverflow.com/questions/588866/whats-the-difference-between-the-atomic-and-nonatomic-attributes/589392#589392 – bbum

+0

一些類似的討論在這裏,包括我的答案結尾的斯威夫特例子: http://stackoverflow.com/a/34386923/23649 – jtbandes

回答

0

搜索答案後,我從this網站的以下:

線程安全的代碼可以從多個線程或併發任務安全地調用,而不會造成任何問題(數據損壞,系統崩潰,等等)。不是線程安全的代碼一次只能在一個上下文中運行。線程安全代碼的一個例子是let a = [「線程安全」]。這個數組是隻讀的,你可以同時使用它從多個線程中沒有問題。另一方面,用var a = [「thread-unsafe」]聲明的數組是可變的,可以修改。這意味着它不是線程安全的,因爲多個線程可以同時訪問和修改數組,同時產生不可預知的結果。變量和數據結構是可變的,而不是固有的線程安全的,一次只能從一個線程訪問。

1

如果多個線程可以調用方法或訪問對象的成員數據而沒有任何問題,則說對象是線程安全的;一個「問題」廣義上被定義爲只從一個線程訪問時脫離行爲。

例如包含代碼i = i + 1一個普通整數i是線程安全的,因爲兩個線程可能會遇到語句和一個線程可能會讀的i原始值,增加它的對象,然後寫回單個遞增值;所有在同一時間另一個線程。這樣,i只會增加一次,它應該增加兩次。

0

線程不安全 - >如果任何對象允許同時修改多個線程。 線程安全 - >如果任何對象不允許同時修改多於一個線程。不可變對象通常是線程安全的