我正在研究多线程代码。数据访问通过“NSLock”对象锁定在几个部分中。我想确保在这些部分中调用的某些方法检查是否获得了适当的锁。
类似的东西:
assert([myLock isSet] == YES);
我在NSLock中找不到类似“isSet”的内容。是否设置了如何确保锁定的任何想法?
谢谢!
答案 0 :(得分:9)
你是如何获得锁定的?如果你打电话给lock
,那么你之后甚至跑步的事实应该保证你已经获得了它。如果您致电lockBeforeDate
,则返回值会告诉您。
如果你想从其他地方进行测试,你可以做到
if ( [myLock tryLock] )
{
// oops, lock was not previously acquired!
...
[myLock unlock];
}
else
{
// yep, lock was already acquired
}
然而,总的来说这似乎是一个值得怀疑的事情。你应该在需要的地方进行锁定并相信它可以工作,而不是试图从外面监督它。
答案 1 :(得分:6)
没有
因为,你知道,无论你得到什么结果都是无用的,因为当你实际使用它时,它可能会(will)出错。一个例子:
它也失败了:
这样的问题正是为什么调试死锁和竞争条件非常棘手的原因。
我想你应该问另一个关于你实际问题的问题。