Как предотвратить постоянный захват семафора одним конкретным процессом - PullRequest
0 голосов
/ 10 ноября 2019

Итак, у меня есть общая память, и эта общая память доступна для основных и пользовательских процессов. Мастер запускается и отключает пользовательские процессы (за которыми следует exec). Все процессы должны общаться друг с другом. Вот что должно произойти:

user process n gets semaphore write some msg in shared memory 
master process gets semaphore reads this msg does something
user process n gets semaphore writes some msg in shared memory 
master process gets semaphore reads this msg does something

Вместо этого происходит следующее:

user process 1 writes something in shared msg 
user process 2 gets semaphore 
user process 3 gets sempahore but msg is meant for master (There is a bit in shared memory which will not allow the user processes to read messages meant for master)
master process gets semaphore reads msg does something, empties shared msg
master process gets semaphore, nothing in shared msg
master process gets semaphore,nothing in shared msg

Таким образом, в основном, основной и пользовательский процессы должны чередоваться, но чередование чересчур меньше иБольшую часть времени, когда oss или пользовательский процесс sem_posts семафор, он немедленно возвращает его обратно.

У кого-нибудь есть какой-нибудь лучший способ сделать это?
Я думал об использовании msg_send и msg_receive вместо семафора os, но, честно говоря, я так далеко в этом проекте, и мне потребовалось бы куча нагрузкиработать, чтобы изменить все.

Есть ли способ убедиться, что семафор взят только определенным PID?

...