2012-10-18 83 views
0

我明白IOS允許使用的方法,同時

@synchronized(self) { /* lock is effective inside here only */ } 

可以讓多個線程在同一時間訪問您的方法的線程的具體數量。因此,在使用時,沒有人能夠訪問@synchronized {}中的內容。

我在那裏只允許有限數量的線程,例如只允許2個線程或3個線程同時訪問該方法。

PS:我有送同步請求的方法,我想限制在一個時間

@synchronized(self) { 
    webData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error]; 
    } 

回答

2

使用的NSOperationQueue(如鮑伯·金尼建議)是一個好主意。如果由於某種原因你不喜歡它,你可以使用GCD信號量。

E.g.

@implementation MyObject { 
    dispatch_semaphore_t semaphore_; 
} 

- (id)init { 
    if ((self = [super init])) { 
     semaphore_ = dispatch_semaphore_create(3); 
    } 
} 

- (void)dealloc { 
    dispatch_release(semaphore_); 
} 

- (void)doTheThing { 
    dispatch_semaphore_wait(semaphore_, DISPATCH_TIME_FOREVER); { 
     // Do expensive operation here. At most 3 threads can do it at once. 
    } dispatch_semaphore_signal(semaphore_); 
} 

Read about 「Using Dispatch Semaphores to Regulate the Use of Finite Resources」 in the Concurrency Programming Guide瞭解更多。

1

也許會更好,如果你試圖解釋你的使用情況發送最大爲3同步請求。如果您的目標是限制一些正在運行的流程,我鼓勵您檢查NSOperationNSOperationQueue,因爲這會爲您提供該功能。

Concurrency Programming Guide

NSOperationQueue