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

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

Сообщение Anonymous »

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

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


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

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

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

Предполагая, что блокировка в потоке B владеет собственностью после того, как разблокировка в потоке A освободила собственность, и есть операции блокировки и разблокировки в потоке C.
[thread.mutex.requirements.mutex.general] p8 говорит

Синхронизация: предыдущие операции unlock() на том же объекте синхронизируются с ([intro.multithread]) этой операцией.

Это означает, что разблокировка в потоке A происходит до блокировки в потоке Б. Однако [thread.mutex.requirements.mutex.general] не указывает, считаются ли блокировки и разблокировка модификациями или нет. Итак, как сделать вывод, что следующая модификация недействительна?

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

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

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

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

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

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

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

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