Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Программирование Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
А чем отличается критическая секция от мьютекса?
По сути ведь критическая секция в Windows это тот же мьютекс перед которым сначала запускается на некоторое время spinlock.
2 июн 12, 15:36    [12655610]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
eNose
Member

Откуда:
Сообщений: 183370
мьютекс - это у ядра.
критическая секция - это у программы (процесса).


а так одно и то же...
2 июн 12, 19:29    [12656190]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
А чем отличается критическая секция от мьютекса?
По сути ведь критическая секция в Windows это тот же мьютекс перед которым сначала запускается на некоторое время spinlock.
Тем же чем перекресток отличается от светофора.
2 июн 12, 19:48    [12656228]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
критическая секция от мьютекса,

По назначению и возможностям с точки зрения логики работы кода это одно и то же.

Есть только две особенности, очень важные.
1) мьютекс —объект ядра и он медленнее критической секции.
2) крит. секция принадлежит одному процессу, за счет этого она быстрая, но она не может работать в нескольких процессах, только в одном. У неё нет имени, только адрес, который определен в рамках одного процесса.
2 июн 12, 20:25    [12656383]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
MasterZiv
критическая секция от мьютекса,

По назначению и возможностям с точки зрения логики работы кода это одно и то же.

Есть только две особенности, очень важные.
1) мьютекс —объект ядра и он медленнее критической секции.
2) крит. секция принадлежит одному процессу, за счет этого она быстрая, но она не может работать в нескольких процессах, только в одном. У неё нет имени, только адрес, который определен в рамках одного процесса.

А с чем связано то, что в языках есть только мьютексы, и нету критических секций, а вызывать их можно только через WINAPI?
И есть ли критические секции под Linux/Unix?
2 июн 12, 23:16    [12656811]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
А с чем связано то, что в языках есть только мьютексы, и нету критических секций, а вызывать их можно только через WINAPI?
И есть ли критические секции под Linux/Unix?
Тут идет мешанина из терминов и "облегчений жизни" которые все усложняют.

В теоретической CS, "критическая секция" это кусок кода который обращается к общему ресурсу.
Кроме этого в виндах (и только в них) есть специальное API для работы с критическими секциями. Смотри EnterCriticalSection

В теоретической CS, mutex это сокращение от "mutual exclusive", теория описывающая критические секции.
Кроме этого существуют библиотеки синхронизации (вариант семафоров и/или замков реализованные через семафоры и/или замки) которые имеют в своих названиях и именах функций слово mutex. Они есть и под винды и под юниксы. Смотри CreateMutex и Pthread Mutex Functions.

А теперь вопрос на засыпку, о каких критических секциях и мьютексах говорили те кто отметился в этом топике? :)
2 июн 12, 23:33    [12656841]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
Например я говорил об boost::mutex и WINAPI EnterCriticalSection. Но мне казалось, что теория и практика для критических секций одинакова. Она же одинакова для мьютексов.

Насколько я понял под Linux/Unix нету критических секций, а есть только мьютексы, семафоры и спинлоки?
3 июн 12, 00:05    [12656886]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
Например я говорил об boost::mutex и WINAPI EnterCriticalSection. Но мне казалось, что теория и практика для критических секций одинакова. Она же одинакова для мьютексов.

Насколько я понял под Linux/Unix нету критических секций, а есть только мьютексы, семафоры и спинлоки?
Ты не правильно понял. Критические секции есть всегда если есть общий ресурс для нескольких процессов или нитей.
То что в виндах придумали упрощающие функции неявно создающие объекты-мьютексы и/или семафоры вовсе не означает что критические секции есть только в виндах.
3 июн 12, 02:23    [12657102]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
eNose
Member

Откуда:
Сообщений: 183370
White Owl
А теперь вопрос на засыпку, о каких критических секциях и мьютексах говорили те кто отметился в этом топике? :)
о виндовых.

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

у критикал секшион (в винде) есть только адрес внутри процесса. и получить к нему доступ из вне с обычными привелениями нельзя. да и ненужно.
3 июн 12, 10:49    [12657309]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
White Owl
критическая секция от мьютекса
Например я говорил об boost::mutex и WINAPI EnterCriticalSection. Но мне казалось, что теория и практика для критических секций одинакова. Она же одинакова для мьютексов.

Насколько я понял под Linux/Unix нету критических секций, а есть только мьютексы, семафоры и спинлоки?
Ты не правильно понял. Критические секции есть всегда если есть общий ресурс для нескольких процессов или нитей.
То что в виндах придумали упрощающие функции неявно создающие объекты-мьютексы и/или семафоры вовсе не означает что критические секции есть только в виндах.

А в Linux или Unix есть именно аналог виндовой функции критической секции, т.е. более быстрой чем мьютекс?
И есть ли она в boost?
3 июн 12, 12:13    [12657389]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
А в Linux или Unix есть именно аналог виндовой функции критической секции, т.е. более быстрой чем мьютекс?
А почему ты считаешь что она более быстрая?
Виндовый набор EnterCriticalSection/LeaveCriticalSection это по существу те-же самые самые методы синхронизации, что и ты сам бы делал через ручное создание мьютексов, семафоров или замков. Я не знаю какой именно механизм винда использует в данном конкретном случае, но магии не бывает. Винда ДОЛЖНА использовать один из этих синхронизирующих механизмов.

критическая секция от мьютекса
И есть ли она в boost?
Понятия не имею, я boost'ом не пользуюсь. Может и есть, но если нету то наваять свои собственные никаких проблем не составляет:
EnterCriticalSection (void (*f) ){
  Если есть семафор/замок ассоциированный с адресом f
     то ждать пока он освободится
     иначе создать новый
  запустить f();
}
LeaveCriticalSection(void (*f) ) {
   освободить семафор/замок ассоциированный с адресом f
}

А будешь ты использовать semaphors, spinlocks или boost::mutex, и как ты будешь хранить список этих автоматически созданных объектов синхронизации решать тебе. Что удобней, то и бери.
3 июн 12, 18:51    [12658247]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
Яростный Меч
Member [скрыт]

Откуда:
Сообщений: 28868
а для критической секции предусмотрен кейс, подобный "отказу от мьютекса"?
3 июн 12, 21:28    [12658780]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
White Owl
критическая секция от мьютекса
А в Linux или Unix есть именно аналог виндовой функции критической секции, т.е. более быстрой чем мьютекс?
А почему ты считаешь что она более быстрая?

MasterZiv утверждает, что она быстрее
MasterZiv
Есть только две особенности, очень важные.
1) мьютекс —объект ядра и он медленнее критической секции.
2) крит. секция принадлежит одному процессу, за счет этого она быстрая, но она не может работать в нескольких процессах, только в одном. У неё нет имени, только адрес, который определен в рамках одного процесса.

Вот меня и интересует, а можно ли в рамках какого либо языка или в частности C++ boost использовать именно быструю критическую секцию и именно из стандарта языка или библиотеки boost?
3 июн 12, 23:33    [12659205]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
White Owl
пропущено...
А почему ты считаешь что она более быстрая?

MasterZiv утверждает, что она быстрее
Нууу... я уверен, что в данном случае он ошибается, либо сказал не то что думал :) Нельзя говорить о скорости работы, когда мы используем объекты синхронизации смысл которых остановить выполнение работы до какого-то момента.

С другой стороны, если ты в виндах, то можешь либо один раз написать EnterCriticalSection() и все, либо вручную создать синхронизирующий объект и вручную же прописывать работу с ним. Меньше писать, меньше думать - выше скорость написания программы.

критическая секция от мьютекса
Вот меня и интересует, а можно ли в рамках какого либо языка или в частности C++ boost использовать именно быструю критическую секцию и именно из стандарта языка или библиотеки boost?
ээээ... отдели мух от котлет пожалуйста.
Если ты хочешь использовать функции вот этой группы, то ты можешь их использовать напрямую из С. Никакого boost или других библиотек, только чистый WinAPI. Из других языков возможно будут проблемы - WinAPI рассчитан на чистый Cи остальные языки (включая С++) - чем ближе к Си, тем проще использовать WinAPI.
А так как это WinAPI, то забудь про все остальные ОС.
4 июн 12, 05:43    [12659502]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
?
Guest
White Owl
Нельзя говорить о скорости работы, когда мы используем объекты синхронизации смысл которых остановить выполнение работы до какого-то момента.
Можно говорить о скорости работы. Смысл объектов синхронизации - не остановить выполнение, а гарантировать отсутствие конфликтов. Захват свободного мьютекса - это в любом случае сотни тактов процессора, поскольку системный вызов и переключение контекста. Захват свободной критической секции - единицы тактов, все на пользовательском уровне, без обращения к функциям ядра.
4 июн 12, 07:23    [12659560]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
критическая секция от мьютекса
Например я говорил об boost::mutex и WINAPI EnterCriticalSection. Но мне казалось, что теория и практика для критических секций одинакова. Она же одинакова для мьютексов.

Насколько я понял под Linux/Unix нету критических секций, а есть только мьютексы, семафоры и спинлоки?


Я лично говорил только об объектах синхронизации Win32/64 API.

В линуксах (на самом деле это POSIX) критических секций нет, там есть более хорошо настраиваемые мьютексы.
4 июн 12, 10:45    [12660221]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
А с чем связано то, что в языках есть только мьютексы, и нету критических секций, а вызывать их можно только через WINAPI?
И есть ли критические секции под Linux/Unix?[/quot]

Мьютекс в языке -- это совсем другое. Общее только название. Как оно внутри реализовано -- только автору известно, и ещё может быть по-разному на разных платформах, потому как API OS разное.

Да, кстати -- boost::mutex -- это ни фига не "в языке".
4 июн 12, 10:50    [12660250]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
А почему ты считаешь что она более быстрая?

Ну, потому что я сказал :-)

Виндовый набор EnterCriticalSection/LeaveCriticalSection это по существу те-же самые самые методы синхронизации, что и ты сам бы делал через ручное создание мьютексов, семафоров или замков. Я не знаю какой именно механизм винда использует в данном конкретном случае, но магии не бывает. Винда ДОЛЖНА использовать один из этих синхронизирующих механизмов.

Там унутре вроде бы InterlockedIncrement/Decrement и InterlockedCheck используются, они быстрее чем обычный мьютекс.
Не знаю, за счёт чего. Но это всё было писано ещё у Рихтера.
4 июн 12, 10:53    [12660270]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34424
Яростный Меч
а для критической секции предусмотрен кейс, подобный "отказу от мьютекса"?


Кстати да, я про это забыл, ещё есть разные нюансы при ненормальном поведении программы/потока.

если ты абортируешь поток/процесс с захваченным мьютексом, он вроде бы будет автоматом освобождён,
а с крит. секцией всё гораздо хуже. Но эти детали надо читать в API, они ещё и меняются со временем.
4 июн 12, 10:56    [12660293]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
критическая секция от мьютекса
Guest
MasterZiv
критическая секция от мьютекса
А с чем связано то, что в языках есть только мьютексы, и нету критических секций, а вызывать их можно только через WINAPI?
И есть ли критические секции под Linux/Unix?


Мьютекс в языке -- это совсем другое. Общее только название. Как оно внутри реализовано -- только автору известно, и ещё может быть по-разному на разных платформах, потому как API OS разное.

Да, кстати -- boost::mutex -- это ни фига не "в языке".

Ок, std::mutex :)


White Owl
критическая секция от мьютекса
Вот меня и интересует, а можно ли в рамках какого либо языка или в частности C++ boost использовать именно быструю критическую секцию и именно из стандарта языка или библиотеки boost?
ээээ... отдели мух от котлет пожалуйста.
Если ты хочешь использовать функции вот этой группы, то ты можешь их использовать напрямую из С. Никакого boost или других библиотек, только чистый WinAPI. Из других языков возможно будут проблемы - WinAPI рассчитан на чистый Cи остальные языки (включая С++) - чем ближе к Си, тем проще использовать WinAPI.
А так как это WinAPI, то забудь про все остальные ОС.

Не, меня больше интересует 2 вопроса:
1. Не в WINAPI, а в самих стандартах языков например C++11 и Java нет такого понятия как критическая секция?
2. И если критическая секция по сути тоже что и мьютекс, то зачем в WINAPI есть аж 3 их вида?
- критическая секция
- мьютекс
- фаст мьютекс
4 июн 12, 12:49    [12661090]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
?
Guest
http://msdn.microsoft.com/ru-ru/magazine/cc164040(en-us).aspx
4 июн 12, 13:13    [12661262]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
?
Guest
критическая секция от мьютекса
А в Linux или Unix есть именно аналог виндовой функции критической секции, т.е. более быстрой чем мьютекс?
http://en.wikipedia.org/wiki/Futex
4 июн 12, 13:23    [12661328]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
White Owl
Member

Откуда:
Сообщений: 12360
критическая секция от мьютекса
Не, меня больше интересует 2 вопроса:
1. Не в WINAPI, а в самих стандартах языков например C++11 и Java нет такого понятия как критическая секция?
Есть конечно. Это понятие есть всегда если есть общие ресурсы и доступ к ним из разных процессов.

Забудь о виндовой "критической секции", называя группу WinAPI функций "критической секцией" ты путаешь и сам себя и тех кто тебя читает.

критическая секция от мьютекса
2. И если критическая секция по сути тоже что и мьютекс,
Еще раз повторяю: В теоретической computer science, Mutual Exclusion (mutex) это проблема описывающая работу с критическими секциями.
Это вовсе не одно и тоже, близко, неразрывано связано, но не одно и тоже.

критическая секция от мьютекса
то зачем в WINAPI есть аж 3 их вида?
- критическая секция
- мьютекс
- фаст мьютекс
А это ты говоришь о методах решения проблемы синхронизации. О классах объектов которые можно создавать в винде для решения проблемы синхронизации. Этих классов на самом деле больше (около десятка), у них разные ограничения, разные принципы реализации, разные области применения. Какой использовать в конкретном случае - надо смотреть по задаче и по возможностям класса.
Загляни сюда: http://msdn.microsoft.com/en-us/library/windows/desktop/ms686360%28v=vs.85%29.aspx
4 июн 12, 19:40    [12664046]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
?
Guest
критическая секция от мьютекса
Вот меня и интересует, а можно ли в рамках какого либо языка или в частности C++ boost использовать именно быструю критическую секцию и именно из стандарта языка или библиотеки boost?
Правильно написаная библиотека для тех же к примеру pthread_mutex_* функций должна использовать правильную реализацию - CriticalSection в windows и futex в linux. Что там реально в бусте - сами в исходниках посмотрите :)
5 июн 12, 08:18    [12665375]     Ответить | Цитировать Сообщить модератору
 Re: Чем отличается критическая секция от мьютекса?  [new]
rfq
Member

Откуда: Санкт-Петербург
Сообщений: 223
Критическая секция - это земельный участок, а мьютекс - забор вокруг него. Кроме забора, участок можно окружить рвом, а вместо мьютекса соответственно использовать семафор или монитор.
5 июн 12, 10:06    [12665759]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Программирование Ответить