我有2个方法,每个方法都在不同的线程上。

当Method1处于其关键部分时,Method2需要等待。
请注意,Method2持续运行,并且仅在Method1在其关键部分运行时才需要等待。否则,只需继续其工作即可。

我怎么做?

伪代码:

Method1
{
       Announce the entrence to critical-section
       ......Do some stuff.........
       Announce the leaving of critical-section
}


Method2
{
       Method1 is in its critical-section? - WAIT TILL IT DONE
       ......Do some stuff...........
}

最佳答案

您应该使用条件变量来可靠地控制2个线程之间的行为。从技术上讲,您可以通过共享变量来完成其他答案所建议的操作,但是在其他情况下它将很快崩溃。

BOOL isMethod1Busy = NO;
NSCondition *method1Condition = [[NSCondition alloc] init]

- (void)method1
{
    [method1Condition lock];
    isMethod1Busy = YES;

    // do work

    isMethod1Busy = NO;
    [method1Condition signal];
    [method1Condition unlock];
}

- (void)method2
{
    [method1Condition lock];
    while (isMethod1Busy) {
        [method1Condition wait];
    }

    // do stuff while method1 is not working

    [method1Condition unlock];
}

关于iphone - 在 objective-c 中同步2个线程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8640590/

10-08 21:30