我有一个引用计数缓冲区。在一个帖子中,我填写了。弃写了引用计数并将大量数据写入其中。
现在理论上,如果在完成后重新计数,我可以将缓冲区升级为原子地重新安装的内容,只要人们只能读取它。在伪代码中,这看起来像:
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写入!)在其他线程开始读取之前退出。我想在将数据写入缓冲区时避免使用原子操作,并且只在这里做一些高延迟的事情吗?"评价。
这样做的正确方法是什么?
答案 0 :(得分:0)
没关系。线程产生将进行必要的同步。