powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер буфера fifo ограничен?
9 сообщений из 34, страница 2 из 2
Размер буфера fifo ограничен?
    #34073242
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, кстати, как корректней id для семофоров выбирать. Т.к. он будет использоваться в разных программах, то задавать его прийдется статически. Может существуют каки-либо правила, или зарезервированные интервалы?
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34073283
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska onstat-Вы меня убедите, если подскажете как взвести 5 мутексов
одновременно, чтобы избежать дедлоков между процессами.
Я, к сожалению, простого способа не знаю.

Я честно сказать не представляю задачу для которой это было бы жизненно необходимо. Опишите вкратце цель - может просто найдутся другие варианты реализации.


Попробую.
t1, t2,t3 tn некие моменты времени

Некий процесс П1 устанавливает блокировку на ресурс А1,
но для работы с этим обьектом необходимо
установить блокировку еще на ресурс(обьект) А3.
Для работы с A3 необходимо поставить блокировку на А2.

Некий другой процесс устанавливает блокировку на ресурс A2
и ему тоже требуется работа с А3.

Третьему процессу П3 для нормальной работы достаточно блокировать
обьекты по одиночке.

т1 А1 заблокирован процессом П1.
т2 А2 заблокирован процессом П2.
т3.А3 заблокирован процессом П1.
т4 П1 ждет разблокировки ресурса А2.
т4 П2 ждет разблокировки А3.

Все ждут , никто ничего не делает.

При правильном использовании массивов семафоров все необходимые обьекты блокируются за одну операцию и в один момент веремни.
Т.Е. Один процесс может может захватить все необходимые ему ресурсы
атомарно, за один системный вызов.

To ALL: Как это зделать на мутексах?

ska
Работа с общей памятью мутексами не ограничивается, а в pthread еще rwlock полезен бывает, да и поэффективнее.


Функционал аналогичный rwlock реализуется классом в 40 сторках кода.

ska
К тому же есть очч большие нюансы ежели имеете дело со всякими динозаврами. Проблема может заключаться в том что не все threadы лайтвейт :-)) pthread равно как и всякая жава проблему зту решает через симуляцию,

Чесно , Ничего не понял.
Что имеется ввиду под динозаврами?
Смысл threadы лайтвейт :-)) ?
Причем тут Жава?

Что такое симуляция?

ska
а вот изза одного semop-а все ваши потоки и подмерзнут...


Используя IPC_NOWAIT получаем механизм подобный try_lock.

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


з.ы Я не спорю, что для большенства задач многонитевой процесс
будет лучше нескольких процессов. Но механизмы синхронизации
меня не совсем устраивают. Буду благодарен за наставление на путь истинный если я чего то не понимаю.
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34073305
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhДа, кстати, как корректней id для семофоров выбирать. Т.к. он будет использоваться в разных программах, то задавать его прийдется статически. Может существуют каки-либо правила, или зарезервированные интервалы?


ф-я ftok генерирует ключи для IPC по имени файла и числу.
при вызове из разных программ, но с одинаковыми параметрами
ключи будут одинаковы.
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34073344
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh

Каким образом можно решить проблему тупиков?
..........



Спасибо, можно еще ссылку на первоисточник?
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34073448
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat- Akh

Каким образом можно решить проблему тупиков?
..........



Спасибо, можно еще ссылку на первоисточник?

вроде, отсюда
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34075328
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
onstat-
Некий процесс П1 устанавливает блокировку на ресурс А1,
но для работы с этим обьектом необходимо
установить блокировку еще на ресурс(обьект) А3.
Для работы с A3 необходимо поставить блокировку на А2.


Если "функция" блокировки А1 будет блокировать сначала А3 (вызывать функцию) а та в свою очередь А1 то никаких дедлоков не будет.
Хуже конечно когда есть круговая зависимость.

onstat-
При правильном использовании массивов семафоров все необходимые обьекты блокируются за одну операцию и в один момент веремни.


Это конечно да, но разблокировать может кто угодно и малейшая ошибка приводит к длительной отладке.

onstat-
Т.Е. Один процесс может может захватить все необходимые ему ресурсы
атомарно, за один системный вызов.
To ALL: Как это зделать на мутексах?


Ну например завести один мутекс, один кондишн и массив int - полностью просимулирует семафоры.

onstat-
ska
К тому же есть очч большие нюансы ежели имеете дело со всякими динозаврами. Проблема может заключаться в том что не все threadы лайтвейт :-)) pthread равно как и всякая жава проблему зту решает через симуляцию,
Чесно , Ничего не понял.
Что имеется ввиду под динозаврами?
Смысл threadы лайтвейт :-)) ?
Причем тут Жава?
Что такое симуляция?


Я имел ввиду проблемы ежели один или более процессов многопоточные (многонитевые... отстал от терминологии), а динозавр например HP Nonstop (Tandem), у которого ядро операционки не многопоточное. Ежели один из потоков вызовет semop и попадет на нем в ожидание то ВСЕ потоки этого процесса будут в ожидании.
Библиотека pthread эту проблему обходит.

onstat-
И ничего сложного, в том чтобы заказать ALARM, если не поддерживатеся
semtimedop я не вижу.


Для многопоточных процессов alarm может не отработать так как Вы хотите.

onstat-
з.ы Я не спорю, что для большенства задач многонитевой процесс
будет лучше нескольких процессов. Но механизмы синхронизации
меня не совсем устраивают. Буду благодарен за наставление на путь истинный если я чего то не понимаю.

Ну посмотрите хоть на java хоть в .NET - послабее чем pthread но хватает для всего. А с точки зрения широты употребления и полезности знаний pthread уж явно лучче чем IPCS.

Сергей
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34077419
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska onstat-
Некий процесс П1 устанавливает блокировку на ресурс А1,
но для работы с этим обьектом необходимо
установить блокировку еще на ресурс(обьект) А3.
Для работы с A3 необходимо поставить блокировку на А2.
Некий другой процесс устанавливает блокировку на ресурс A2
и ему тоже требуется работа с А3.

Третьему процессу П3 для нормальной работы достаточно блокировать
обьекты по одиночке.

т1 А1 заблокирован процессом П1.
т2 А2 заблокирован процессом П2.
т3.А3 заблокирован процессом П1.
т4 П1 ждет разблокировки ресурса А2.
т4 П2 ждет разблокировки А3.

Все ждут , никто ничего не делает.



Если "функция" блокировки А1 будет блокировать сначала А3 (вызывать функцию) а та в свою очередь А1 то никаких дедлоков не будет.
Хуже конечно когда есть круговая зависимость.


Вот и получается круговая зависимость.

ska
onstat-
При правильном использовании массивов семафоров все необходимые обьекты блокируются за одну операцию и в один момент веремни.


Это конечно да, но разблокировать может кто угодно и малейшая ошибка приводит к длительной отладке.


При любой синхронизации можно насупить комуто или самому себе на хвост :)

К семафорам нужно относится не как к блокировкам в чистом виде а как
к флагам(приоритетам) синхронизации.

Я не вижу ничего плохого в том что любой процесс имеет возможность
влиять на эти флаги.
Например:
Есть 5 процессов каждый из которых выполняет свою независимую логику.
Есть процесс манагер который обеспечивает эти процессы данными
и забирает результаты.
Процесс манагер, заполнив данные для рассчета, устанавливает
семафоры которые будят процессы обработчики и они начанают
работу, по окончании которой возвращают флаги на место.
просыпается процесс манагер и обрабатывает результаты выполнения.

По сравнению с pthread экономия как минимум на 5 системных вызовах.

Семафор не только защищает данные, а и управляет приритетами выполнения.


ska
Ну например завести один мутекс, один кондишн и массив int - полностью просимулирует семафоры.


Массив семафоров так просто проэмулировать не получится.
1. Не всегда есть необходимость менять(проверять) все семафоры в наборе, а только некотрые.
2. Заставить нить заснуть по кондишину зависящему от 1 до n элементов массива?
3. Гораздо проблематичнее ее потом будить по кондишину.

Теоретически реализовать можно, но это будет не просто.

ska
Ну посмотрите хоть на java хоть в .NET - послабее чем pthread но хватает для всего. А с точки зрения широты употребления и полезности знаний pthread уж явно лучче чем IPCS.

Сергей

По поводу лучше не согласен (это мое личное мнение).
По поводу широты употребеления полностью поддерживаю и даже использую.

С уважением, Константин
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34078576
ska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skaЕсли "функция" блокировки А1 будет блокировать сначала А3 (вызывать функцию) а та в свою очередь А1 то никаких дедлоков не будет.

Я имел ввиду А1 блокирует А3 а та А2 (согласно зависимости)
onstat-
т1 А1 заблокирован процессом П1.
т2 А2 заблокирован процессом П2.


П2 в момент т2 будет ждать пока П1 не освободит А1

onstat-
По сравнению с pthread экономия как минимум на 5 системных вызовах.


Пяти Нету. Два сэкономите - (раз)блокировка мутекса

onstat-
Семафор не только защищает данные, а и управляет приритетами выполнения.


Чего там насчет приоритетов ??? Очередностью исполнения может.

onstat-
ska
Ну например завести один мутекс, один кондишн и массив int - полностью просимулирует семафоры.

Массив семафоров так просто проэмулировать не получится.
1. Не всегда есть необходимость менять(проверять) все семафоры в наборе, а только некотрые.

Ну и не проверяйте все. Я говорю о том что просто всю semop как функцию на pthread можно написать
onstat-
2. Заставить нить заснуть по кондишину зависящему от 1 до n элементов массива?

Проверьте состояние нужных Вам элементов и если нужно ждать так и засните (по единственному кондишену)
onstat-
3. Гораздо проблематичнее ее потом будить по кондишину.

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

Реализовать то проще пареной репы (об эффективности я правда промолчу)

onstat-
По поводу лучше не согласен (это мое личное мнение).


Да нет смысла спорить. Есть задачи для которых semop намного эффективнее и удобнее. Сам его активно пользовал. А лет 20 назад ничего другого и не было :-)

С уважением, Сергей.
...
Рейтинг: 0 / 0
Размер буфера fifo ограничен?
    #34079026
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ska
Да нет смысла спорить. Есть задачи для которых semop намного эффективнее и удобнее. Сам его активно пользовал. А лет 20 назад ничего другого и не было :-)


Вот именно, лучше решите, где лучше семафоры, а где мьютексы. А в таком стиле невозможно определить о чем спор. ;)
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Размер буфера fifo ограничен?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]