gpt4 book ai didi

c++ - 调用atomic的store()时可以调用基类型类的函数吗? C++

转载 作者:行者123 更新时间:2023-12-01 14:25:09 27 4
gpt4 key购买 nike

在我的代码中,我有一个从自定义类创建的对象原子数组。简而言之,这个类看起来像这样:

class myObj{
public:
//some members here...

//constructor
myObj()noexcept{
//some code here
}

//function I want to call
void myFunc(){//some code here}
};

现在假设我有一个原子对象,而不是一个数组。我会在 main.cpp 中声明它,如下所示:

std::atomic<myObj> atomic_var;

我当然想(原子地)在上面的变量中存储一些东西。因此,我首先创建一个临时的 myObj,然后对我的原子变量调用 .store()

myObj temp;
atomic_var.store(temp, std::memory_order_...);

现在内存顺序无关紧要。

在调用.store()时是否可以调用myObj::myFunc()

谢谢。

最佳答案

Is it possible to call myObj::myFunc() when .store() is called as above?

std::atomic<myObj>::is_lock_freefalse因为myObj是用户定义的类型。这意味着 std::atomic<myObj>是使用互斥量实现的,但不会公开该互斥量。

你可以做的是让互斥体成为 myObj 的数据成员并实现 myObj& operator=(myObj const&)要锁定该互斥量,请执行其工作(例如,也调用 myObj::myFunc() )然后解锁互斥量。并使用 myObj而不是 std::atomic<myObj> .

另一种方法是实现 std::atomic<myObj> 的自定义完全特化。 ,但这可能比它值得的工作更多。

关于c++ - 调用atomic的store()时可以调用基类型类的函数吗? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62625868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com