相关疑难解决方法(0)

复制具有原子成员的类的构造函数

我有一个原子成员的类,我想写一个复制构造函数:

struct Foo
{
    std::atomic<int> mInt;

    Foo() {}
    Foo(const Foo& pOther)
    {
        std::atomic_store(mInt, std::atomic_load(pOther.mInt, memory_order_relaxed), memory_order_relaxed);
    }
};
Run Code Online (Sandbox Code Playgroud)

但我不知道我必须使用哪种顺序,因为我不知道将在何时何地调用此复制构造函数.

我可以使用relaxed复制构造函数和赋值运算符的顺序吗?

c++ multithreading atomic

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

如何用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
查看次数

标签 统计

c++ ×2

multithreading ×2

atomic ×1

c++11 ×1

lock-free ×1

lockless ×1