Я пытаюсь выполнить итерацию по вектору, используя его индекс, несколькими потоками, и я хотел бы знать, правильно ли выполняются следующие строки (моя проблема связана с проблемой безопасности потоков). Иными словами, находится счетчик гарантированно получит значение atomicVar до atomicVar увеличивается на другие темы?Является ли эта тема безопасной? localThreadVar = ++ atomicGlobalVar
static std::atomic<int> atomicVar = 0;
Threaded_Function()
{
int size = myVector.Size();
int counter = 0;
while (counter= ++atomicVar, counter <= size){
auto element = myVector [counter - 1];
// Do Something
}
}
Почему порядок присваивания переменной локального счетчика (который не разделяется между потоками) имеет значение, если исходная последовательность «atomicVar» (предположительно) увеличивается атомарно среди всех потоков? Если основной вопрос: «Будет ли доступ к myVector последовательно», то нет, то есть * не * гарантировано, даже если была гарантия над самим присваиванием. – user2864740
ОК, я добавил определение atomicVar. Я никогда не упоминал, что этот порядок имеет значение! Я просто хочу, чтобы все элементы были посещены в конце. –
на стороне примечания, было бы более идиоматично писать 'counter = atomicVar ++, counter