1. 程式人生 > >多執行緒併發訪問可能出現的崩潰問題

多執行緒併發訪問可能出現的崩潰問題

出現這個崩潰的現象是, 進入一個介面時,該介面會同時發起三個非同步請求操作。每個操作在發起資料請求時,都可能會調某一方法進行存取某一屬性值。

如屬性comName;

該屬性宣告為:@Property (nonatomic, strong) NSString *comName;

-(void)updateComInfo {

self.comName = @"nicedone";

}

當這幾個非同步請求在發起時每一個請求都會先執行updateComInfo方法,而每一個請求都是在一個NSOperation中的。這三個NSOperation請求在各自的執行緒中,執行順序不確定,所以會可能出現兩個執行緒同時呼叫updateComInfo,從而會出現同時修改self.comName的呼叫,從而會出現崩潰的問題。

解決辦法:

1. 把self.comName屬性修改成atomic。 但這種方法會導致當前執行緒訪問時,其它的執行緒執行受阻。所以除非特別必要,建議不要使用這個方法。

2. 修改執行緒呼叫updateComInfo,避免同時呼叫的情況出現。如用臨時變數資料進行代替。 或者注意改動程式碼,以避免同時去修改一個變數。或者在修改這個變數時進行加鎖操作。