将引用计数缓冲区升级为原子引用计数缓冲区

时间:2014-11-29 04:38:10

标签: concurrency atomic

我有一个引用计数缓冲区。在一个帖子中,我填写了。弃写了引用计数并将大量数据写入其中。

现在理论上,如果在完成后重新计数,我可以将缓冲区升级为原子地重新安装的内容,只要人们只能读取它。在伪代码中,这看起来像:

refcount = 1
write some data
refcount += 1
write some data
refcount -= 1
write some data

if refcount != 1:
  fail()

// do something here?

for i in range(0, 100):
    refcount.atomic_increment()
    spawn_thread({
      refcount.atomic_increment()
      read some data
      refcount.atomic_decrement()
      refcount.atomic_decrement()
    })

我怀疑我需要某种内存屏障来确保所有缓冲区写入(和refcount写入!)在其他线程开始读取之前退出。我想在将数据写入缓冲区时避免使用原子操作,并且只在这里做一些高延迟的事情吗?"评价。

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

没关系。线程产生将进行必要的同步。