2011-10-17 37 views
0

爲什麼我們使用我們什麼時候可以使用@synchronize 同時使用線程操作同步多線程操作&。如何同步目標C中的多個線程操作?

,這可能是一個愚蠢的問題,我需要了解線程的概念。請幫助理解。

在此先感謝。

+2

閱讀[線程編程指南(http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Multithreading/Introduction/Introduction.html)。你的問題非常廣泛。 – omz

回答

2

爲什麼我們使用同步多線程操作

考慮@synchronize爲遞歸鎖,你傳遞給它的參數(實例)。如果您想要鎖定而沒有采用NSLocking或聲明ivar,這很有用。

@synchronize不是一個理想的解決方案速度的問題。 pthread_mutex es快幾倍,最後我測試了一遍。

...什麼時候可以在使用線程操作時使用@synchronize。

它的功能就像一個遞歸互斥。因此,在程序流程中的任何時候都可以安全地引入它。爲一個對象請求多個鎖(通過@synchronize)也是安全的;它是遞歸的,如果你從同一個線程兩次獲得對它的參數的鎖定,它將不會發生死鎖。

* 與遞歸互斥一樣安全,但@synchronized也會在發生異常時解鎖。


如果你只需要知道爲什麼鎖定在簡單來說很重要:需要鎖定,以防止多個讀取或在同一時間寫的對象和/或存儲。無鎖,讀,同時可以吹走你的程序的完整性,因爲不受保護的讀取,讀取時寫在你的程序中執行任意一點(這將導致不確定的行爲,無效的狀態,部分更新,可能會出現多個線程編寫的,不一致的狀態,以及難以分離的崩潰的良好來源)。關於這個主題有一些非常大的解讀,但是在較低的層次上鎖定和線程化是你想要關注的(而不是專門針對@synchronize的主題)。