Может ли нестандартная библиотека избежать гонки данных в стандартном C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Может ли нестандартная библиотека избежать гонки данных в стандартном C++?

Сообщение Anonymous »


Рассмотрим следующий пример:

bool lock(); // предоставлено системой Бул разблокировать(); // предоставлено системой статический int v = 0; //поток 1 недействительный вызов () { замок(); v = 1; // №1 разблокировать(); } // поток 2 недействительный вызов2 () { замок(); v = 2; // #2 разблокировать() } Предположим, что lock и unlock — это мьютекс, предоставляемый системой, они предотвратят #1 и < code>#2 от создания гонки данных, если они могут установить связь «произошло до». Однако [intro.races] p10 говорит

Оценка A происходит до оценки B (или, что то же самое, B происходит после A), если:
[*]A располагается перед B или [*]Межпоточный обмен происходит до B.
Для оценок в двух потоках мы ожидаем, что синхронный установит связь «произошло до». Однако синхронность определена для стандартной библиотеки, например, для некоторых атомарных операций или std::mutex. Стандарт не определял концепции синхронизации для других нестандартных библиотек. Следовательно, с точки зрения стандарта C++, мы не получаем синхронности при использовании lock() и unlock, даже если это предусмотрено системой.

То есть синхронной может быть только стандартная библиотека, потому что стандарт прямо так говорит? В зависимости от нестандартной библиотеки может возникнуть UB, даже если библиотека предоставляется системой и в документе API указано, что она позволяет избежать гонки данных.
Ответить

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

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

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

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

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