Семоп не удалось неверный аргумент AIX 7.1 - PullRequest
0 голосов
/ 26 ноября 2018

В нашем проекте мы используем семафор для синхронизации между родительским и дочерним процессами.выполните операцию семафора и удалите семафор при каждой синхронизации.

Через пару недель операция семопа завершилась неудачно с «недопустимым аргументом».любая утечка семафора из-за определенного процесса.

In man page i could see the possible reason for invalid argument could see below:
EINVAL  The SemaphoreID parameter is not a valid semaphore identifier.
EINVAL  The number of individual semaphores for which the calling process requests a SEM_UNDO flag would exceed the limit.

I am suspecting the point 2.
It is multithreaded process. So Howmany semaphore can be used at a time for a procees ?
What is the limit of "SEM_UNDO" ?
1) how to make sure that EINVAL is due to "SEM_UNDO" flag exceed limit. ?.
2) how to avoid the exceed limit ?
3) Is there any kernel variable needs to be configured for this issue (in AIX most of the kernals are dynamic)?

Заранее благодарим за помощь в этом

1 Ответ

0 голосов
/ 27 ноября 2018

Как я уже писал в комментарии, другой ваш поток / процесс удалил семафор, который вы пытались использовать.Вы не должны создавать и уничтожать семафоры при каждом использовании.

Выкл.: Я признаю, что семафоры SYSV имеют небольшую причуду, то есть они созданы со значением = 0, что означает заблокирован (или зарезервирован , получен ) вместо значения = 1 (что означает бесплатно (или доступно )).Это можно исправить с помощью простого трюка, пример программы: http://lzsiga.users.sourceforge.net/sysv_sem_test.c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...