sch*_*yxp 3 iphone multithreading locking unlock
我在这里使用NSCondition类:
- (void) method1
{
[[cocoaCondition lock] lock];
while (!someCheckIsTrue) {
[cocoaCondition wait];
}
// Do something.
[cocoaCondition unlock];
}
- (void) method2
{
[cocoaCondition lock];
// Do something.
someCheckIsTrue = YES;
[cocoaCondition signal];
[cocoaCondition unlock];
}
Run Code Online (Sandbox Code Playgroud)
我有两个线程,thread1运行method1,thread2运行method2.我希望在[cocoaCondition wait]调用时,thread1将被阻止.然后当thread2调用时[cocoaCondition signal],thread1将恢复运行.我测试了代码,它正如我希望的那样工作.
但是,如您所见,当代码运行时:
第1步,thread1调用:( [cocoaCondition lock] Apple doc说:尝试获取锁,阻止线程的执行,直到获得锁定)
第2步,thread1调用:[cocoaCondition wait]
第3步,thread2调用:( [cocoaCondition lock]继苹果的doc之后,应该阻塞thread2)
第4步,thread2调用:( [cocoaCondition signal]因此,应该阻塞thread2,并且在调用之前不能调用此方法[cocoaConditon unlock])
我认为我的代码已陷入僵局,但为什么不呢?所以我猜想当thread1调用[cocoaCondition wait]第2步时,cocoaCondition被解锁了,是吗?
文档说:"当一个线程等待条件时,条件对象解锁其锁定并阻塞线程.当条件被发出信号时,系统唤醒线程.条件对象然后在从等待返回之前重新获取其锁定或waitUntilDate:method.因此,从线程的角度来看,就好像它始终保持锁定一样."
你的猜测是正确的.
| 归档时间: |
|
| 查看次数: |
6273 次 |
| 最近记录: |