Как вы используете std :: atomic для обеспечения взаимного исключения в кодовом блоке?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как вы используете std :: atomic для обеспечения взаимного исключения в кодовом блоке?

Сообщение Anonymous »

У меня есть функция, которая обращается (читает и записывает) std :: atomic переменная. Я пытаюсь понять порядок выполнения инструкций, чтобы решить, будет ли атомка достаточным или я должен использовать здесь мутекс. Функция приведена ниже -< /p>

Код: Выделить всё

// somewhere member var 'executing' is defined as std::atomic`

int A::something(){

int result = 0;
// my intention is only one thread should enter next block
// others should just return 0
if(!executing){
executing = true;

...
// do some really long processing
...

result    = processed;
executing = false;
}

return result;
}
< /code>

Я прочитал эту страницу о CPPReerference, в которой упоминается -< /p>

Каждое экземпляр и полная специализация шаблона Atd :: Atomic определяет атомный тип. Если один поток записывает в атомный объект, в то время как другой поток считывает из него, поведение хорошо определена (см. Модель памяти для получения подробной информации о расах данных) < /p>
< /blockquote>
и на модели памяти. Говорят, что выражения конфликтуют. Программа, у которой есть две противоречивые оценки, имеет расу данных, если ни один < /p>

  Обе противоречивые оценки не являются атомными операциями (см. STD :: Atomic) < /p>
< /li>
  Одна из конфликтов) < />
  < /pmord hord_ dord_ dord_ dord_ dord_ dord_ dord_ dord_ dord_ dord_ dord_ dord wemord wem dom hom /> < /li>
< /ul>
Если происходит раса данных, поведение программы не определен. Другая ветка. См. Std :: Memory_order для получения подробной информации о порядке, в котором записи, сделанные из потоков, становятся видимыми в другие потоки. И что более важно - гарантировано ли, что ни один другой поток не введет, что если цикл, если один два потока введет это, если тело, так как первое установит выполнение 
true ?>

Подробнее здесь: https://stackoverflow.com/questions/398 ... code-block
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»