【发布时间】:2014-11-29 04:38:10
【问题描述】:
我有一个引用计数缓冲区。在一个线程中,我将其填满。欺骗引用计数并将一堆数据写入其中。
现在理论上,如果完成后引用计数完成,我可以安全地将缓冲区升级为原子引用计数的东西,只要人们只能从中读取。在伪代码中,这看起来像:
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 写入!)在其他线程开始读取之前退出。我想在将数据写入缓冲区时避免原子操作,并且只在“在这里做点什么?”中做高延迟的事情。评论。
这样做的正确方法是什么?
【问题讨论】:
标签: concurrency atomic