1

Objective-C では @synchronized を使用してクリティカル セクションを定義できることがわかっていますが、複数のスレッドがメソッドまたはコード ブロックにアクセスしているかどうかを知る方法はありますか?

4

1 に答える 1

1

NSLockオブジェクト (参照) を使用して、次を使用してロックをテストできますtryLock

@interface MyObject : NSObject
{
    NSLock *_lock;
}
...

@end

@implementation MyObject

- (id)init
{
    ...
    _lock = [[NSLock alloc] init];
    ...
}

- (BOOL)myMethod
{
    if (![_lock tryLock])
    {
        NSLog(@"Failed to acquire lock");
        return NO;
    }

    // Thread has exclusive access
    // Caution; the lock won't be automatically unlocked if this method throws an exception
    // so add some exception handling here to ensure it's always unlocked...
    @try
    {
        // Do stuff
    }
    @finally
    {
        [_lock unlock];
    }
    return YES;
}

@end
于 2013-02-01T12:53:24.923 に答える