我正在研究多线程代码。通过“NSLock”对象将数据访问锁定在几个部分中。我想确保在这些部分中调用的某些方法检查是否获得了适当的锁定。

就像是:

assert([myLock isSet] == YES);

我在NSLock中找不到类似“isSet”的东西。有什么想法如何确保设置锁?

谢谢!

最佳答案

您如何获得锁?如果您正在调用lock,那么您甚至在之后运行的事实也应确保您已获得它。如果您调用lockBeforeDate,则返回值会告诉您。

如果您想从其他地方进行测试,则可以

if ( [myLock tryLock] )
{
    // oops, lock was not previously acquired!
    ...
    [myLock unlock];
}
else
{
    // yep, lock was already acquired
}

但是,总的来说,这似乎是一件值得怀疑的事情。您应该在需要的地方进行锁定,并相信它可以正常工作,而不是试图从外部进行监督。

10-05 20:03