将原子compare-and-swap
作为原语,是否可以原子地写入许多不同的内存位置?也就是说,例如:
// initialization
mem[0] = 0;
mem[1] = 0;
// thread A runs
mem[0] = 1;
mem[1] = 1;
// thread B runs
int x = mem[0];
int y = mem[1];
printf("%d %d", x, y);
这里,线程B可以输出0, 0
,如果它在A之前运行,1, 1
,如果它在A之后运行,则输出1, 0
,如果它在A的两个语句之间运行。我想以原子方式写1, 0
和mem[0] = 1
来避免mem[1] = 1
案例。
在这个非常具体的用例中,我显然可以有一个信号量来锁定索引0,1,但是
我想知道是否可以在没有额外记忆的情况下实现效果。