【发布时间】:2013-01-09 08:59:12
【问题描述】:
有没有办法用连词创建一个原子if?也就是说,我可以在 C 中以某种方式自动测试 if(A && B) 吗?如果它在第一次合流中短路,那没问题,但如果没有,当它检查B 时,A 可能已经改变。有什么想法吗?
编辑:不使用粗锁或信号量。
【问题讨论】:
-
使用适当的同步对象。
-
由于涉及多个汇编指令,您只能通过提供显式同步来使它们成为原子指令。即:将两条指令捆绑在一起作为一个逻辑单元,并在使用之前和之后应用锁(mutex or semaphore or ...)。
-
@Dervin 不要试图调节 cmets,而是专注于改进您的问题。平台?记忆模型?为什么你确定没有重新排序,你用
volatile吗?诸如“将 A 和 B 作为两个字节保留在同一个对齐的机器字中,因此负载是原子的”之类的答案可能是答案,但不是您提供的那一点信息。 -
@Dervin:这一定是我在 StackOverflow 上见过的最粗鲁和短视的评论之一。
-
@DervinThunk 我真的不喜欢这个问题。对于问题的真正复杂性,指定的背景(机器,系统,任何东西)太少了。此外,正如 Anton 指出的那样,这个问题似乎没有什么意义,因为这些值的变化可能会在检查之后发生。
标签: c concurrency atomic