小编Bug*_*Man的帖子

如何用c ++ 11 CAS实现ABA计数器?

我正在实现一个基于此算法的无锁队列,该算法使用计数器来解决ABA问题.但我不知道如何用c ++ 11 CAS实现这个计数器.例如,从算法:

E9:    if CAS(&tail.ptr->next, next, <node, next.count+1>)
Run Code Online (Sandbox Code Playgroud)

它是一个原子操作,意思是如果tail.ptr->next等于next,则tail.ptr->next指向node同时(原子地)产生next.count+1.但是,使用C++ 11 CAS,我只能实现:

std::atomic_compare_exchange_weak(&tail.ptr->next, next, node);
Run Code Online (Sandbox Code Playgroud)

这不可能next.count+1同时发生.

c++ multithreading lock-free lockless c++11

5
推荐指数
1
解决办法
1924
查看次数

为什么"#define A"会干扰"命名空间A {}"?

以下代码可以编译:

namespace A{
    int i;
}
namespace B{
    int i;
}
int main(){ return 0; }
Run Code Online (Sandbox Code Playgroud)

但是下面的代码无法编译:

#define A
#define B

namespace A{
    int i;
}
namespace B{
    int i;
}
int main(){ return 0; }
Run Code Online (Sandbox Code Playgroud)

错误信息是

错误:重新定义'int {anonymous} :: i'

在我定义之后A,B为什么命名空间的名称变成匿名?

使用的编译器:gcc-4.9.3.

c++ namespaces

4
推荐指数
1
解决办法
115
查看次数

标签 统计

c++ ×2

c++11 ×1

lock-free ×1

lockless ×1

multithreading ×1

namespaces ×1