В многопоточном приложении C++ мне нужно взаимное исключение для защиты простой булевской переменной?

На All.js нужно ссылаться, если вы хотите отображать значки SVG вместо значков веб-шрифта, так как значки SVG отображаются с использованием JavaScript. Если вы используете значки веб-шрифтов, просто обратитесь к All.css и пропустите файлы js.

Если вам нужна информация для обоснования вашего решения, вы можете прочитать эту тему здесь: Icon Fonts vs SVGs

14
задан Brian Stewart 21 October 2008 в 07:23
поделиться

4 ответа

В C++ 11 и позже, который определил стандартами параллелизм, использование std::atomic<bool> с этой целью. От http://en.cppreference.com/w/cpp/atomic/atomic :

, Если один поток пишет в атомарный объект, в то время как другой поток читают из него, поведение четко определено (см. модель памяти для получения дополнительной информации о гонках данных).

<час>

следующий старый ответ, возможно, был верен в некоторое время в прошлом с некоторыми компиляторами и некоторыми операционными средами, но на это нельзя положиться сегодня:

<забастовка> Вы правы, в этом случае Вы не должны будете синхронизировать bools. Необходимо объявить их volatile, хотя, чтобы гарантировать, что компилятор на самом деле читает их из памяти каждый раз, вместо того, чтобы кэшировать предыдущее чтение в потоке (это - упрощенное объяснение, но это должно сделать с этой целью).

следующий вопрос имеет больше информации об этом: Поток C++, совместно используемые данные

15
ответ дан 24 October 2019 в 05:06
поделиться

То, почему не просто используют , взаимно блокировало переменную ?

7
ответ дан 24 October 2019 в 05:06
поделиться

Я не думаю Вы потребность полностью оперенное взаимное исключение здесь - хотя потоку рендеринга будет нужно к активному ожиданию в 'приостановленном' состоянии, если Вы не будете использовать объект синхронизации, который поддерживает примитивное ожидание.

необходимо изучить использование различных взаимно блокируемых обменных примитивов хотя (InterlockedExchange в соответствии с Windows). Не потому что чтение-записи от bool является неатомарным, но гарантировать, что нет никаких странных поведений компилятора, переупорядочивающего доступы памяти на единственном потоке.

3
ответ дан 24 October 2019 в 05:06
поделиться

Этот поток имеет немного больше информации и обсуждения потокобезопасности, специально для простых типов данных:

, Как я могу создать ориентированный на многопотоковое исполнение шаблон "одиночка" в Windows?

1
ответ дан 24 October 2019 в 05:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: