Какие барьеры памяти существуют в C ++ 98? - PullRequest
0 голосов
/ 10 июня 2019

Я споткнулся об этой теме: Почему volatile не считается полезным в многопоточном программировании на C или C ++?

и наткнулся на следующее в топе проголосовавшего ответа ...

Тем не менее, барьеры памяти также гарантируют, что все ожидающие чтения / записи выполняются, когда барьер достигнут, поэтому он фактически дает нам все, что нам нужно, сам по себе, что делает энергозатраты ненужными. Мы можем просто полностью удалить изменчивый классификатор.

Начиная с C ++ 11, атомарные переменные (std :: atomic) дают нам все соответствующие гарантии.

Я работаю на платформе, поддерживающей C ++ 98, так какой барьер памяти был доступен для C ++ 98? Я пытался использовать мьютекс для mbed, но я не могу логически определить, является ли мьютекс достаточным способом защиты, например, последовательной записи и чтения, происходящих в двух одновременных потоках, поскольку у меня недостаточно уверенности в отношении безопасности потоков.

Какой простой способ получить доступ к простому общему ресурсу в c ++ 98?

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Стандарт C ++ 98 является однопоточным (потоки не существуют), поэтому нет в стандарте.Однако у вас будут определенные барьеры памяти для ОС / платформы.

1 голос
/ 11 июня 2019

но я не могу логически определить, является ли мьютекс достаточным способом защиты, например, последовательной записи и чтения, происходящих в двух одновременных потоках

Если код мьютексане может гарантировать, что они по определению нарушены.Мы должны увидеть этот код, чтобы проверить, правильно ли он был выполнен.

...