gpt4 book ai didi

iphone - NSCondition 是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 19:36:40 31 4
gpt4 key购买 nike

我在这个意义上使用 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];
}

我有两个线程,线程1运行方法1,线程2运行方法2。我希望当[cocoaCondition wait]被调用时,thread1将被阻塞。然后当thread2调用[cocoaCondition signal]时,thread1将恢复运行。我已经测试了代码,它正如我希望的那样工作。

但是,正如您所看到的,当代码运行时:

第 1 步,线程 1 调用:[cocoaCondition lock] (苹果文档说:尝试获取锁,阻塞线程的执行,直到可以获取锁)

第2步,线程1调用:[cocoaCondition wait]
步骤3,线程2调用:[cocoaCondition lock] (按照苹果的文档,thread2应该被阻塞)
步骤4,线程2调用:[cocoaCondition signal] (因此,thread2应该被阻塞,并且在调用[cocoaConditon unlock]之前不能调用此方法)

我认为我的代码陷入了僵局,但为什么不呢?所以我猜当thread1调用[cocoaCondition wait]时cocoaCondition被解锁在第 2 步中,是吗?

最佳答案

NSCondition Class Reference

文档中说:“当线程等待某个条件时,条件对象会解锁其锁并阻塞该线程。当条件发出信号时,系统会唤醒该线程。然后,条件对象在从返回之前重新获取其锁。 wait 或 waitUntilDate: 方法。因此,从线程的角度来看,就好像它始终持有锁。”

你的猜测是对的。

关于iphone - NSCondition 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8611994/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com