2012-05-08 60 views
1

我是否需要創建線程安全變量?我只會在mainThread和dispatch_async(dispatch_get_main_queue()使用MYDATA。我是否需要創建線程安全變量?

-(void) mainThread 
{ 
mydata = 55; 
} 

-(void) concurrentThread 
{ 
dispatch_async(dispatch_get_main_queue(),^
{ 
    mydata = 77;       
}); 
} 

回答

3

我不認爲有必要在這種情況下做什麼特別的mydata,因爲它永遠只從主更新螺紋(假設mainThread意味着,方法永遠只能從主線程調用)這還假定你是不是要讀從任何地方mydata但主線程以及

進一步的解釋:。

雖然concurrentThread在主線程以外的線程上運行,但mydata = 77出現在派發到主線程的塊中的事實意味着該分配實際上將在主線程上進行,並以某種連續順序與任何其他讀/寫到主線程上發生的變量。因此,假設在訪問mydata的主線程上沒有其他地方沒有代碼,這段代碼是安全的。

+0

當mainthread更新變量時,它不會保護任何其他線程讀取**垃圾文件。 – JustSid

+0

我沒有看到任何代碼在主線程之外對'mydata'變量做任何事情。如果你正在假設他是否從別處讀取變量,那麼這是一個不同的故事。 – UIAdam

+0

在你看來'concurrentThread'是什麼? –

相關問題