天天看點

iOS OS X 和 iOS 中的多線程技術-3 (NSThread)

//聯系人:石虎 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];

 }

 }

謝謝!!!