Как избежать утечки ресурсов при использовании семафора? - PullRequest
0 голосов
/ 04 октября 2018

Linux sem_destroy() документация гласит:

Безымянный семафор должен быть уничтожен с помощью sem_destroy() до того, как память, в которой он находится, будет освобождена.Невыполнение этого требования может привести к утечке ресурсов в некоторых реализациях.

Но лучшее, что я могу сделать, - это зарегистрировать sem_destroy() в atexit(), который не будет вызываться при сбое или SIGKILL,У меня есть процесс, отвечающий за создание и уничтожение семафора в общей памяти (файл mmaped), как я могу избежать утечки ресурсов при ненормальных условиях завершения?

В Linux, если файл mmaped удален до sem_destroy() называется, какой-либо ресурс утечка?Какой ресурс?

1 Ответ

0 голосов
/ 04 октября 2018

Реализация sem_destroy в glibc ничего не делает, и это не изменится.Если вы используете glibc, вам не нужно ничего делать для освобождения ресурсов.Более того, ядро ​​в любом случае освободит такие ресурсы при завершении процесса.

Реализация семафоров в glibc основана на futexes , поэтому ему не нужны никакие дополнительные ресурсы, кроме памяти, используемой дляхранить семафор.

...