Std :: mutex создает забор?

Если я заблокируюstd::mutex я всегда получу забор памяти? Я не уверен, если это подразумевает или заставляет вас получить забор.

Обновить:

Нашел эту ссылку после комментариев RMF.

Многопоточное программирование и видимость памяти

Ответы на вопрос(2)

Как я понимаю, это кроется в:

1.10 Multi-threaded executions and data races

Para 5:

The library defines a number of atomic operations (Clause 29) and operations on mutexes (Clause 30) that are specially identified as synchronization operations. These operations play a special role in making assignments in one thread visible to another. A synchronization operation on one or more memory locations is either a consume operation, an acquire operation, a release operation, or both an acquire and release operation. A synchronization operation without an associated memory location is a fence and can be either an acquire fence, a release fence, or both an acquire and release fence. In addition, there are relaxed atomic operations, which are not synchronization operations, and atomic read-modify-write operations, which have special characteristics. [Note: For example, a call that acquires a mutex will perform an acquire operation on the locations comprising the mutex. Correspondingly, a call that releases the same mutex will perform a release operation on those same locations. Informally, performing a release operation on A forces prior side effects on other memory locations to become visible to other threads that later perform a consume or an acquire operation on A. “Relaxed” atomic operations are not synchronization operations even though, like synchronization operations, they cannot contribute to data races. —end note]

Решение Вопроса

Разблокировка мьютексаsynchronizes with блокировка мьютекса. Я не знаю, какие опции есть у компилятора для реализации, но вы получаете тот же эффект ограждения.

 23 июн. 2012 г., 23:22
Как и в случае с забором, это только заставляет некоторые области памяти быть актуальными (те, с изменениями модели памяти, которые должны быть видны согласноsynchronizes with отношения).
 23 июн. 2012 г., 23:11
Я не понимаю. Заборы в C ++ не влияют на определенные области памяти.
 23 июн. 2012 г., 23:06
Я думаю, что ОП спрашивает о фехтовании для других областей памяти, кроме самого мьютекса.
 23 июн. 2012 г., 23:13
Я говорю это: предположим, ядро А пишетA[0] и затем освобождает мьютекс. Затем Core B получает мьютекс и читаетA[0] (перед согласованием кэша может распространяться новое значениеA[0] в ядро B.) Другими словами, заставляет ли мьютекс обновлять все области памяти перед возвратом.
 23 июн. 2012 г., 23:31
Если это помогает, заборы определяются как просто установлениеsynchronizes with отношения, больше ничего. Все гарантии, которые вы получаете от забора, являются лишь следствием правил модели памяти. Поскольку мьютексы также устанавливаютsynchronizes with отношения, их эффекты одинаковы (ну, у мьютексов есть другие эффекты, но здесь они не актуальны).

Ваш ответ на вопрос