我正在研究多线程代码。通过"NSLock“对象将数据访问锁定在多个部分中。我希望确保在这些部分中调用的一些方法检查是否获得了适当的锁。
类似于:
assert([myLock isSet] == YES);我在NSLock中找不到像"isSet“这样的东西。有没有什么办法确保锁被设置?
谢谢!
发布于 2010-08-24 20:50:06
你是如何获得锁的?如果你在调用lock,那么你甚至在之后运行的事实应该保证你已经获得了它。如果调用lockBeforeDate,返回值将告诉您。
如果你想从其他地方测试,你可以这样做
if ( [myLock tryLock] )
{
// oops, lock was not previously acquired!
...
[myLock unlock];
}
else
{
// yep, lock was already acquired
}然而,总的来说,这似乎是一件值得怀疑的事情。您应该在需要的地方进行锁定,并信任它的工作,而不是试图从外部监督它。
发布于 2010-08-24 22:50:21
不是的。
因为,您看,无论您得到什么结果都是无用的,因为当您抽出时间实际使用它时,它可能(will)是错误的。举个例子:
从另一方面来说,它也失败了:
线程锁定您发现锁不是locked.
像这样的问题正是调试死锁和竞态条件如此棘手的原因。
我认为你应该就你的实际问题再问一个问题。
https://stackoverflow.com/questions/3556422
复制相似问题