Что произошло, когда ожидающий процесс (в очереди семафоров) получает сигнал от другого процесса? - PullRequest
0 голосов
/ 01 ноября 2019

Я занимаюсь школьным проектом: мне нужно управлять многими процессами. После того, как они сгенерированы родителем (wht fork ()) и запущены с execve, они должны общаться друг с другом, и они отлично работают. Проект включает в себя 2 файла .c, один из которых (отец создает детей), а другой - с кодом детей. Проблема возникает, когда у меня есть много процессов очередей и ожидания, которые хотят получить доступ к критическому разделу (где я решил внедрить семафор мьютекса)

Код похож на:

 decrease_semaphore

 //start critical section

 kill(pid,signal)  /*try to send a signal to a probably queuing  process at the same semaphore*/
 increase_semaphore
 //end of critical section

Отправленный сигнал захватывается обработчиком, написанным мной.

Итак, что происходит с процессом организации очереди, в который отправляется сигнал? Получает ли он его и покидает очередь ожидания, выполняя обработчик?

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

извините за любые неточностиЯ недавно начал писать в c:)

1 Ответ

0 голосов
/ 02 ноября 2019

Если вы используете 'sem_wait', и сигнал получен (и не заблокирован), sem_wait вернет -1 и установит для errno значение EINTR. Это можно использовать для различения других сбоев (например, ETIMEDOUT).

...