我理解
@synchronized(self) { /* lock is effective inside here only */ }
可以防止多个线程同时访问您的方法。因此,在使用@synchronized {}时,没有人能够访问内部的内容。
我在某处我只允许有限数量的线程,例如只允许2个线程或3个线程同时访问该方法。
PS:我有一个发送同步请求的方法,我想限制一次最多发送同步请求
@synchronized(self) {
webData = [NSURLConnection sendSynchronousRequest: request returningResponse: &response error: &error];
}
答案 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_);
}
答案 1 :(得分:1)
如果你试图解释一下你的用例,也许会更好。如果您的目标是限制一些正在运行的进程,我建议您检查NSOperation
和NSOperationQueue
,因为这将为您提供该功能。