Считаются ли методы блокировки и разблокировки объекта-мьютекса модификациями объекта?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Считаются ли методы блокировки и разблокировки объекта-мьютекса модификациями объекта?

Сообщение Anonymous »

[thread.mutex.requirements.mutex.general] p4 говорит

В целях определения существования гонки данных они ведут себя как атомарные операции ([intro.multithread]). Операции блокировки и разблокировки одного мьютекса выполняются в одном общем порядке.


[Примечание 2: Это можно рассматривать как порядок модификации мьютекса.
— последнее примечание]

Порядок модификации описывает только модификации объекта в соответствии с [intro.races] p4

Все модификации конкретного атомарного объекта M происходят в определенном общем порядке, называемом порядком модификации M.

Если в [thread.mutex.requirements.mutex.general] не указано, что операции разблокировки и блокировки являются модификациями, как может [intro.races] p11 ~ p14 применяется здесь, чтобы определить положение соответствующих операций в порядке модификации мьютекса?
Чтобы прояснить суть проблемы, рассмотрим этот пример

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

#include 

std::mutex m;
int main(){
m.lock(); // #1
m.unlock(); // #2
}
Где в текущем стандарте формулировка, которая определяет единый общий порядок m как #1 < #2, а не #2 < #1? Как отметил @PeterCordes, объект типа мьютекса даже не определен как «атомарный объект», поэтому [intro.race] p11-p14 здесь даже не может применяться для указания порядка в общем порядке. Не говоря уже о том, что также неясно, являются ли lock и unlock модификациями.
[thread.mutex.requirements.mutex.general] p4 говорит только, что #1 и #2 встречаются в одном общем порядке. Если нет явной формулировки, указывающей, как две операции объекта-мьютекса упорядочиваются в общем порядке m с точки зрения happens-before, согласно определению самого общего порядка, общий порядок m может быть либо #1 < #2, либо #2 < #1.

Подробнее здесь: https://stackoverflow.com/questions/798 ... cations-to
Ответить

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

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

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

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

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