ios允许特定数量的线程同时使用方法

时间:2012-10-18 03:51:29

标签: ios multithreading synchronized locks

我理解

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

可以防止多个线程同时访问您的方法。因此,在使用@synchronized {}时,没有人能够访问内部的内容。

我在某处我只允许有限数量的线程,例如只允许2个线程或3个线程同时访问该方法。

PS:我有一个发送同步请求的方法,我想限制一次最多发送同步请求

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

2 个答案:

答案 0 :(得分:2)

使用NSOperationQueue(如Bob Kinney建议的那样)是一个好主意。如果由于某种原因你不喜欢它,你可以使用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 :(得分:1)

如果你试图解释一下你的用例,也许会更好。如果您的目标是限制一些正在运行的进程,我建议您检查NSOperationNSOperationQueue,因为这将为您提供该功能。

Concurrency Programming Guide

NSOperationQueue