无锁定作业队列(多次读/写)-请求审查



我正在寻找一个*简单的无锁作业队列,它可以以通用的方式跨平台使用。

*没有外部依赖项,只有很少的接口调用,没有可能在不同编译器之间中断的奇特编译器技巧,最好只有头

要么我不擅长谷歌搜索,要么这不可用。(它们不是互斥的,但你明白了)

在推送功能中,让标记两点:

Line 1: start_.compare_exchange_strong( tmp, newnode );
Line 2: node_ptr prev_end = end_.exchange( newnode ); // and set next pointer

现在,考虑两个调用push的线程:

                start   end     a.next  b.next
Begin           null    null    -       -
TA.push(a) - 1  a       null    null    null
TB.push(b) - 1  a       null    null    null
TB.push(b) - 2  a       b       null    null
TA.push(a) - 2  a       a       null    a

正如你所看到的,b在列表中丢失了。

最新更新