在Objective-C中,如何检测多个线程是否正在访问该方法?
在Objective-C中,我们知道@synchronized可以用来定义一个关键部分,但是有没有办法知道多个线程是否正在访问一个方法或代码块?您可以使用在Objective-C中,如何检测多个线程是否正在访问该方法?,objective-c,multithreading,Objective C,Multithreading,在Objective-C中,我们知道@synchronized可以用来定义一个关键部分,但是有没有办法知道多个线程是否正在访问一个方法或代码块?您可以使用NSLock对象()并使用tryLock测试锁: @interface MyObject : NSObject { NSLock *_lock; } ... @end @implementation MyObject - (id)init { ... _lock = [[NSLock alloc] init];
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
您可以使用
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
这是为了调试吗?您可以检查[NSThread currentThread]实例(如果需要,您还有[NSThread mainThread]实例…)是用于调试。这是为了在开发过程中进行检查,以确保我没有添加不必要的@synchronized块。这是为了调试吗?您可以检查[NSThread currentThread]实例(如果需要的话,您还有[NSThread mainThread]实例…)是为了调试。这是为了在开发过程中检查以确保我没有添加不必要的@synchronized块。谢谢。对于@synchronized,我应该使用什么支票?@Boon没有
@synchronized
将生成pthread\u mutex
代码,该代码将始终尝试锁定,并且除了使用类似于我的答案的方法之外,没有其他方法来执行try lock,这就是我相信您正在寻找的。谢谢。对于@synchronized,我应该使用什么支票?@Boon没有@synchronized
将生成pthread\u mutex
代码,该代码将始终尝试锁定,并且除了使用类似于我的答案的方法之外,没有其他方法来执行try lock,我相信您正在寻找它。