是否可以仅使用比较和交换以原子方式写入许多地方?

时间:2018-05-25 22:53:41

标签: c parallel-processing atomic compare-and-swap

问题

将原子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, 0mem[0] = 1来避免mem[1] = 1案例。

我尝试了什么

在这个非常具体的用例中,我显然可以有一个信号量来锁定索引0,1,但是

  1. 需要额外的内存,
  2. 它不允许我写入任意数量的索引。
  3. 我想知道是否可以在没有额外记忆的情况下实现效果。

0 个答案:

没有答案