【问题标题】:Upgrading a reference counted buffer to an atomically reference counted buffer将引用计数缓冲区升级为原子引用计数缓冲区
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-28
      • 1970-01-01
      • 2021-01-14
      相关资源
      最近更新 更多