//聯系人:石虎 QQ:1224614774 昵稱:嗡嘛呢叭咪哄
一、NSThread
NSThread 是 OS X 和 iOS 都提供的一個線程對象,它是線程的一個輕量級實作。在執行一些輕量級的簡單任務時,NSThread 很有用,但使用者仍然需要自己管理線程生命周期,進行線程間同步。比如,線程狀态,依賴性,線程間同步等線程相關的主題 NSThread 都沒有涉及。比如,涉及到線程間同步仍然需要配合使用 NSLock,NSCondition 或者 @synchronized。是以,遇到複雜任務時,輕量級的 NSThread 可能并不合适。
提供一個模拟多線程運作的簡單例子:兩個人同時一起到烤箱搶面包。我們啟動兩個線程,來代表兩個人。由于烤箱門比較小,同時隻能有一個人去拿面包。由于 NSThread 不處理線程同步,是以為了模拟這個過程, 你還需要一把線程鎖(即類型為 NSLock 的執行個體變量 _lock)。在後面的 run 方法中會用到這把線程鎖:
_lock = [[NSLock alloc] init];
NSThread *geroge = [[NSThread alloc] itWithTarget:self selector:
@selector(run) object:nil];
[geroge setName:@"Geroge"];
[geroge start];
NSThread *totty = [[NSThread alloc] nitWithTarget:self selector:
@selector(run) object:nil];
[totty setName:@"Totty"];
[totty start];
二、代碼實作
受到線程鎖保護的拿面包過程可以用下面的 run 方法表示:
- (void)run {
while (TRUE) {
[_lock lock];
if(_cake > 0){
[NSThread sleepForTimeInterval:0.5];
_cake--;
_occupied = kSum - _cake;
NSLog(@"Taken by %@\nCurrent free:%ld, occupied:
%ld", [[NSThread currentThread] name], _cake, _occupied);
}
[_lock unlock];
}
}
謝謝!!!