功能无法同时运行

时间:2016-02-24 18:44:21

标签: ios objective-c

我想创建一个只运行一次的函数,如果仍在运行则取消。

我在开始/结束时使用一个简单的锁布尔值尝试了它,但有时它是“重叠”。

有更好更安全的方法吗?

@property (assign) BOOL lock;

- (void)myFuntion
{
    if (self.lock) {
        NSLog(@"(Canceled) Syncing is already running...");
        return;
    }

    self.lock = YES;

    // My Code

    self.lock = NO;
}

2 个答案:

答案 0 :(得分:3)

NSLock课程应该可以在这里帮助你。我没有直接尝试这个例子,但是像:

NSLock *myFunctionLock=[NSLock new]; // this should be a class data member/property/etc.

- (void)myFuntion
{
    if (![myFunctionLock tryLock])
        return; /* already running */

    // My Synchronized Code

    [myFunctionLock unlock];
}

答案 1 :(得分:1)

我们都假设你在谈论并发编程,你在不同的线程上运行相同的代码。如果那不是你的意思那么你需要解释你的意思,因为在同一个线程上运行的代码只能在任何特定时刻执行一次。

查看NSLock的{​​{1}}功能。断言锁定的第一个调用者返回TRUE,并且可以继续访问关键资源。其他呼叫者返回FALSE并且不应该访问关键资源,但不会阻止。