реклама на сайте
подробности

 
 
> sem_wait, sem_timedwait, непонятка какая-то...
SM
сообщение Feb 7 2011, 21:19
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Речь о не-ембеддед, просто линукс, 2.6.18-194.32.1.el5

Мне вот непонятно кое что... Использую семафоры для обработки событий, источником которых могут быть разные процессы, одним процессом. Суть в том - создаю два семафора - "Start" и "Complete", у обоих начальное значение ноль. Процесс-сервер в sem_wait ждет семафора "start". Клиент подготавливает данный в shared memory, и постит start, после чего ждет complete. Сервер, дождавшись start-а, делает свое дело, и постит complete. Клиент идет дальше.

А глюк очень странный - тестовый "клиент" всегда работает четко, не удалось его повесить. А вот реальный клиент, а это процесс, который добирается до моей функции через целый слой shared object-ов (динамически подключаемых библиотек), умудряется наглухо вешаться в sem_wait для семафора "completed", при том, что гарантированно известно, что сервер запостил его, и семафор имеет значение 1. И, самое глючное, что при замене sem_wait на sem_timedwait с таймаутом в 10 секунд и в бесконечном цикле до тех пор, пока не дождется, все начинает работать идеально и даже не тормозит...

Вопрос: что бы это все значило? Каким макаром можно повлиять на процесс так, чтобы sem_wait не "развис" после sem_post, при этом сохраняя нормальную работу sem_timedwait? Я, конечно, понимаю, что поставив sem_timedwait я "типа решил проблему", но это сопля какая-то. Хочется понять, что там на самом деле произошло.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016