【问题标题】:Objective C: Atomic decrement of integer without @synchronized?目标C:没有@synchronized的整数原子递减?
【发布时间】:2012-06-11 21:18:53
【问题描述】:

如果我使用

@property (atomic,assign) int value;

然后像这样访问它

self.value--;

这个减量是原子的吗?因为如果我必须这样做:

self.value = self.value - 1;

那么我确信读取和写入之间可能会出现竞争条件。

我的直觉当然是这样做

@synchronized(self) { value--; }

但有人告诉我这不是犹太洁食。

谢谢。

【问题讨论】:

    标签: objective-c properties atomic race-condition synchronized


    【解决方案1】:

    按照this article from Apple 中的说明尝试 OSAtomicIncrement 和 OSAtomicDecrement。

    self.value = self.value - 1;          
    

    无论属性如何定义,都不会是原子的。

    【讨论】:

    • 酷。 (赞成。)我不知道那些原子操作。比处理像增量这样简单的锁要干净得多。
    • 请注意,每个人 写入值都必须使用相同的原子操作样式。如果您的线程使用 OSAtomicIncrement 而我的线程使用 @synchronized (self) { self.value += 1;它不会工作。最好使用执行原子添加的方法使其成为只读属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多