|
|
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
Да, кстати, как корректней id для семофоров выбирать. Т.к. он будет использоваться в разных программах, то задавать его прийдется статически. Может существуют каки-либо правила, или зарезервированные интервалы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 11:08 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
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 я не вижу. з.ы Я не спорю, что для большенства задач многонитевой процесс будет лучше нескольких процессов. Но механизмы синхронизации меня не совсем устраивают. Буду благодарен за наставление на путь истинный если я чего то не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 11:17 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
AkhДа, кстати, как корректней id для семофоров выбирать. Т.к. он будет использоваться в разных программах, то задавать его прийдется статически. Может существуют каки-либо правила, или зарезервированные интервалы? ф-я ftok генерирует ключи для IPC по имени файла и числу. при вызове из разных программ, но с одинаковыми параметрами ключи будут одинаковы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 11:23 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
Akh Каким образом можно решить проблему тупиков? .......... Спасибо, можно еще ссылку на первоисточник? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 11:34 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
onstat- Akh Каким образом можно решить проблему тупиков? .......... Спасибо, можно еще ссылку на первоисточник? вроде, отсюда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 12:00 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
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. Сергей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.10.2006, 21:05 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
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. Сергей По поводу лучше не согласен (это мое личное мнение). По поводу широты употребеления полностью поддерживаю и даже использую. С уважением, Константин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 15:26 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
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 назад ничего другого и не было :-) С уважением, Сергей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2006, 22:59 |
|
||
|
Размер буфера fifo ограничен?
|
|||
|---|---|---|---|
|
#18+
ska Да нет смысла спорить. Есть задачи для которых semop намного эффективнее и удобнее. Сам его активно пользовал. А лет 20 назад ничего другого и не было :-) Вот именно, лучше решите, где лучше семафоры, а где мьютексы. А в таком стиле невозможно определить о чем спор. ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2006, 09:44 |
|
||
|
|

start [/forum/topic.php?fid=57&startmsg=34073242&tid=2030200]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
204ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 197ms |
| total: | 490ms |

| 0 / 0 |
