1

我有一个接受整数指针作为参数的函数,然后它会改变它。我有几个在不同线程上运行的函数实例——一些与参数具有相同的整数。

如果参数正在被另一个线程上的另一个函数实例更改,我需要暂停该函数的实例,并在另一个实例完成更改变量时恢复。

对于此类问题,看似显而易见的解决方案是 NSLock 或 POSIX 互斥锁,但这会阻止函数的所有实例继续运行,即使整数参数不同。

为了更直观地了解我的意思,请考虑以下内容:

void theFunction (int *argument)
{   
    NSLock *theLock = [NSLock new];
    [theLock lock];

    (*argument) ++;

    [theLock unlock];
}

上面的代码将阻止函数的所有实例运行,但是我只需要暂停整数参数相同的函数实例。如何专门锁定变量,以暂停任何尝试读取或写入它的实例,直到它被解锁?

4

2 回答 2

1

如果您有 int*,请考虑使用原子增量操作(请参阅 man on OSAtomicAdd32)。您想要的按值锁定非常便宜。

于 2012-08-09T20:24:36.710 回答
0

为每个参数使用单独的锁?

于 2012-08-09T22:22:08.913 回答