Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем? Семафоры есть практически во всех операционных системах, но почему-то в .NET его нет. Говорят, что и в Java его тоже нет. Вопрос: почему? Если есть линк на обсуждения/разъяснения этой темы, буду благодарен!
Semaphores in .NET
От:
Аноним
Дата:
05.01.05 13:29
Оценка:
Видимо просто не успели сделать, пример реализации под .NET есть здесь.
Здравствуйте, Mr.Smith, Вы писали:
MS>Добрый день, многоуважаемый All!
MS>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем? Семафоры есть практически во всех операционных системах, но почему-то в .NET его нет. Говорят, что и в Java его тоже нет. Вопрос: почему? Если есть линк на обсуждения/разъяснения этой темы, буду благодарен!
Могу сказать про Java: потому что монитор прекрасно справляется с теми задачами, для которых семафор предназначен.
Здравствуйте, Mr.Smith, Вы писали:
MS>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем?
Как то на практике потребности в семафоре ни разу не возникало. Вот отсутсвие именованных эвентов напрягает.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Mr.Smith, Вы писали:
MS>>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем?
AVK>Как то на практике потребности в семафоре ни разу не возникало. Вот отсутсвие именованных эвентов напрягает.
А не могли бы Вы поведать, что такое семафоры и именованные события. Первый раз слышу и очень интересно.
Здравствуйте, <Аноним>, Вы писали:
AVK>>Как то на практике потребности в семафоре ни разу не возникало. Вот отсутсвие именованных эвентов напрягает.
А>А не могли бы Вы поведать, что такое семафоры и именованные события. Первый раз слышу и очень интересно.
Именованное событие это очень просто — это событие с именем . Наличие имени дает возможность открывать такое событие из разных процессов. Для мьютексов подобная фича есть (см. конструкторы с параметром типа string), а вот для эвентов почему то нет.
Что же касается семафоров, то это такой мьютекс, у которого есть счетчик. Т.е. если мьютексом может владеть один поток, то семафором некоторое заранее определенное количество.
Здравствуйте, Mr.Smith, Вы писали:
MS>Добрый день, многоуважаемый All!
MS>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем? Семафоры есть практически во всех операционных системах, но почему-то в .NET его нет. Говорят, что и в Java его тоже нет. Вопрос: почему? Если есть линк на обсуждения/разъяснения этой темы, буду благодарен!
Я так понимаю, класс System.Threading.ThreadPool призван обеспечить часть возможностей семафоров.
Re: Semaphores in .NET
От:
Аноним
Дата:
06.01.05 23:09
Оценка:
>Я так понимаю, класс System.Threading.ThreadPool призван обеспечить часть возможностей семафоров.
Здравствуйте, Mr.Smith, Вы писали:
MS>Добрый день, многоуважаемый All!
MS>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем? Семафоры есть практически во всех операционных системах, но почему-то в .NET его нет. Говорят, что и в Java его тоже нет. Вопрос: почему? Если есть линк на обсуждения/разъяснения этой темы, буду благодарен!
В .NET 2.0 этот клас наконец появился. Видать доделали ...
System.Threading.Semaphore
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Mr.Smith, Вы писали:
MS>>Есть вопрос: почему в .NET не реализован класс Semaphore, инкапсулирующий одноименный объект синхронизации операционных систем?
AVK>Как то на практике потребности в семафоре ни разу не возникало. Вот отсутсвие именованных эвентов напрягает.
Имхо, имени нет потому что с ними много мороки:
Terminal Services: The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session name space. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Windows XP Home Edition: Fast user switching is implemented using Terminal Services sessions. The first user to log on uses session 0, the next user to log on uses session 1, and so on. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users. Windows 2000: If Terminal Services is not running, the "Global\" and "Local\" prefixes are ignored. The remainder of the name can contain any character except the backslash character. Windows NT 4.0 and earlier: The name can contain any character except the backslash character. Windows Me/98/95: The name can contain any character except the backslash character. The empty string ("") is a valid object name.
Что ни ОС, то свои особенности. .net сделан как средство избавления от подобных приколов, так что решение не именовать вполне логично.
Здравствуйте, Andrbig, Вы писали:
A>Что ни ОС, то свои особенности. .net сделан как средство избавления от подобных приколов, так что решение не именовать вполне логично.
Интересно, почему тогда есть именованный мьютекс?
... << RSDN@Home 1.2.0 alpha rev. 620 on Windows XP 5.1.2600.131072>>
Здравствуйте, AndrewVK, Вы писали:
AVK>Интересно, почему тогда есть именованный мьютекс?
Согласен, нелогично. Увы, архитектура .net далека от совершенства — тут сделали, там нет... Полагаю, самому MS понадобился именованный мьютекс, вот они его и сделали, наплевав на остальное.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, <Аноним>, Вы писали:
AVK>>>Как то на практике потребности в семафоре ни разу не возникало. Вот отсутсвие именованных эвентов напрягает.
А>>А не могли бы Вы поведать, что такое семафоры и именованные события. Первый раз слышу и очень интересно.
AVK>Именованное событие это очень просто — это событие с именем . Наличие имени дает возможность открывать такое событие из разных процессов. Для мьютексов подобная фича есть (см. конструкторы с параметром типа string), а вот для эвентов почему то нет. AVK>Что же касается семафоров, то это такой мьютекс, у которого есть счетчик. Т.е. если мьютексом может владеть один поток, то семафором некоторое заранее определенное количество.
Боюсь ты заблуждаешься. Разница принципиальная: мьютекс может освободить только поток, который захватил мьютекс, а семафор — кто угодно
А во втором framework семафор появился , а вот события по-прежнему не именованные
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, Andrbig, Вы писали:
A>>Что ни ОС, то свои особенности. .net сделан как средство избавления от подобных приколов, так что решение не именовать вполне логично.
AVK>Интересно, почему тогда есть именованный мьютекс?
Ясно, спасибо, сюда не посмотрел.
А вот в AutoResetEvent и в ManualResetEvent конструкторы не перегрузили , это меня и смутило.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Semaphores in .NET
От:
Аноним
Дата:
05.12.05 12:41
Оценка:
Небольшой семафор можно собрать из массива
mutex-ов нужного размера и метода WaitAny()
у такой реализации есть преимущество — если процесс умирает,
то все захваченные им mutex освобождаются, чего не случается с приведенным выше примером реализации семафора на основе winapi