Я заинтересован в том, чтобы сделать что-то вроде (однопотоковое обновление, многопотоковое чтение banneedURLs):
atomic<bannedURLList*> bannedURLs;//global variable pointing to the currently used instance of struct
void updateList()
{
//no need for mutex because only 1 thread updates
bannedURLList* newList= new bannedURLList();
bannedURLList* oldList=bannedURLs;
newList->initialize();
bannedURLs=newList;// line must be after previous line, because list must be initialized before it is ready to be used
//while refcnt on the oldList >0 wait, then delete oldList;
}
потоки читателя делают что-то вроде этого:
{
bannedURLs->refCnt++;
//use bannedURLs
bannedURLs->refCnt--;
}
struct memeber refCntтакже является атомным целым числом. Мой вопрос: как предотвратить переупорядочение этих двух строк:
newList->initialize();
bannedURLs=newList;
Можно ли это сделать в std :: way?