Multithreading 使用原子进行比较和交换\u比较\u交换\u弱
在这段代码中,std::swap是线程安全的,因此可以同时从两个执行线程调用它,或者我需要使用原子\u compare\u exchange\u弱()而不是swap() 我如何知道这是否适用于所有CPU?我很高兴它能在英特尔CPU上运行Multithreading 使用原子进行比较和交换\u比较\u交换\u弱,multithreading,c++11,Multithreading,C++11,在这段代码中,std::swap是线程安全的,因此可以同时从两个执行线程调用它,或者我需要使用原子\u compare\u exchange\u弱()而不是swap() 我如何知道这是否适用于所有CPU?我很高兴它能在英特尔CPU上运行 #include <utility> class resource { int x = 0; }; class foo { public: foo() : p{new resource{}} { }
#include <utility>
class resource {
int x = 0;
};
class foo
{
public:
foo() : p{new resource{}}
{ }
foo(const foo& other) : p{new resource{*(other.p)}}
{ }
foo(foo&& other) : p{other.p}
{
other.p = nullptr;
}
foo& operator=(foo other)
{
swap(*this, other);
return *this;
}
virtual ~foo()
{
delete p;
}
friend void swap(foo& first, foo& second)
{
using std::swap;
swap(first.p, second.p);
}
private:
resource* p;
};
#包括
类资源{
int x=0;
};
福班
{
公众:
foo():p{new resource{}
{ }
foo(constfoo&other):p{newresource{*(other.p)}
{ }
foo(foo&&other):p{other.p}
{
其他。p=nullptr;
}
foo&运算符=(foo其他)
{
掉期(*本,其他);
归还*这个;
}
虚拟~foo()
{
删除p;
}
朋友无效交换(foo&first,foo&second)
{
使用std::swap;
互换(第一个.p,第二个.p);
}
私人:
资源*p;
};
我理解交换一个指针是过分的,但这可能是一个很好的练习
是线程安全的,因此可以同时从两个执行线程调用它
std::swap
是线程安全的,只要不同的线程向其中传递不同的对象。否则会出现争用条件。这意味着std::swap
不是线程安全的,对吗?@Zereges此函数不维护任何状态,因此它是线程安全且可重入的。