不要等待objective-c中的@synchronized

时间:2011-08-09 10:07:43

标签: iphone objective-c xcode nsthread

我有计时器,每分钟执行一次方法。 该方法有一些代码并调用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;
    }
}

1 个答案:

答案 0 :(得分:4)

您可以围绕NSLock-tryLock的使用推广您的实施。然后,您将能够检查锁是否可用,并且如果它当前被另一个线程锁定则避免阻塞。