Обсуждение:Мьютекс

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

CreateMutex/ReleaseMutex - функции WinAPI. Поэтому некорректно приводить их в тексте, говоря при этом, что это системные вызовы. При том еще ссылаясь в дальнейшем, что в каждой ОС свои функции. Т.о. получилась каша. 95.158.255.179 09:44, 15 декабря 2010 (UTC)

Переделал с обобщением. Так лучше? Netch 08:00, 20 декабря 2010 (UTC)

Неточное определение мьютекса в первом абзаце[править код]

В первом абзаце нет упоминания атрибута "владелец", основного отличия мьютекса от семафора. А это отличие фундаментально в том смысле, что многие алгоритмы построенные на основе семафоров не могут быть реализованы с использованием мьютексов (точнее только с использованием мьютексов без других средств синхронизации).

Например, ISO/IEC 14882:2011(E) (C++11), даёт следующее определение мьютекса исходя из его свойств:

A mutex object facilitates protection against data races and allows safe synchronization of data between execution agents (30.2.5). An execution agent owns a mutex from the time it successfully calls one of the lock functions until it calls unlock. Mutexes can be either recursive or non-recursive, and can grant simultaneous ownership to one or many execution agents. The mutex types supplied by the standard library provide exclusive ownership semantics: only one thread may own the mutex at a time. Both recursive and non-recursive mutexes are supplied.

Конечно, чаще всего мы имеем дело с обычными мьютексами (Си11, C++11, POSIX, WinAPI), которые похожи на "одноместный" семафор. Однако мьютексы значительно проще в реализации на типичных платформах, чем семафоры.

Кроме того, все (или подавляющее большинство реализаций) поддерживают так же "рекурсивные мьютексы", которые уже обладают немного более сложной структурой и уже совсем не похожи на семафоры.

Так же встречается использование понятия "разделяемый мьютекс" (Boost), который обеспечивает возможности, как эксклюзивной принадлежности одному потоку для модификации данных, так и совместного владения несколькими потоками только для чтения данных.

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

Мью́текс (англ. mutex, от mutual exclusion — "взаимное исключение") — программный объект предназначенный для исключения состояния гонок и безопасной синхронизации одновременно выполняющихся потоков определённым образом обращающихся к совместным данным.

Сергей Леонтьев, Крипто-Про 22:57, 4 февраля 2013 (UTC)

Мьютекс это не семафор[править код]

Мьютекс создаёт взаимоисключающий доступ, т.е. только одному потоку, семафоры создают доступ более одному потоку, при этом есть счетчик, у мьютикса его нет. Плюс у мьютекса есть понятие владельца. Вот еще: http://blog.feabhas.com/2009/09/mutex-vs-semaphores-%E2%80%93-part-1-semaphores/ http://www.barrgroup.com/Embedded-Systems/How-To/RTOS-Mutex-Semaphore

46.251.75.242 16:09, 20 августа 2013 (UTC) Евгений Евгеньевич