Multithreading 在c+中有方法吗+;11防止;“正常”;原子操作之前或之后的滑动操作

Multithreading 在c+中有方法吗+;11防止;“正常”;原子操作之前或之后的滑动操作,multithreading,atomic,c++11,Multithreading,Atomic,C++11,我对这样的事情很感兴趣(单线程更新,多线程阅读横幅): 原子横幅//指向当前使用的struct实例的全局变量 void updateList() { //不需要互斥,因为只有1个线程更新 BanneDurlist*newList=新的BanneDurlist(); bannedurlist*oldList=bannedURLs; 新建列表->初始化(); bannedURLs=newList;//行必须在前一行之后,因为列表必须在准备使用之前初始化 //当oldList上的refcnt>0时,请

我对这样的事情很感兴趣(单线程更新,多线程阅读横幅):

原子横幅//指向当前使用的struct实例的全局变量
void updateList()
{
//不需要互斥,因为只有1个线程更新
BanneDurlist*newList=新的BanneDurlist();
bannedurlist*oldList=bannedURLs;
新建列表->初始化();
bannedURLs=newList;//行必须在前一行之后,因为列表必须在准备使用之前初始化
//当oldList上的refcnt>0时,请等待,然后删除oldList;
}
读卡器线程执行以下操作:

{
bannedURLs->refCnt++;
//使用横幅
横幅->参考信息--;
}
struct memeber refCnt也是原子整数 我的问题是如何防止这两行的重新排序:

newList->initialize();
bannedURLs=新列表;

可以用std::方式完成吗?

使用
bannedURLs.store(newList)而不是
bannedURLs=newList。由于您没有通过弱排序说明符,这将强制在存储中进行完全排序。

我很惊讶您甚至可以这样直接分配-我认为您必须始终使用原子的
store()