我有计时器,每分钟执行一次方法。 该方法有一些代码并调用NSThread。 NSthread调用另一个带有临界区的方法。
有时执行关键部分需要一分多钟。我需要以防另一个线程到达@synchronized不等待,但退出函数而不执行代码。
目前我以一种似乎无法正常工作的方式进行,并且两个线程似乎进入关键部分。
代码:
BOOL isRunning;
- (void)mainFunction
{
isRunning = NO;
[NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(glichyFunc) userInfo:nil repeates:YES];
}
- (void)glichyFunc
{
a++;
b--;
[NSThread detachNewThreadSelector:@selector(doJob) toTarget:self withObject:nil];
}
- (void)doJob
{
if (isRunning)
return;
isRunning = YES;
@syncronized{
c = [globalObject calculate];
isRunning = NO;
}
}
答案 0 :(得分:4)
您可以围绕NSLock
和-tryLock
的使用推广您的实施。然后,您将能够检查锁是否可用,并且如果它当前被另一个线程锁定则避免阻塞。