Нужно ли уничтожать семафоры?
У меня есть класс, работающий с (не статичными) семафорами.
В деструкторе этого класса я освобождаю динамически выделяемую память.
Объекты класса не должны быть "разрушены", пока мы wait
для семафора.
Мне все еще нужно использовать sem_destroy
в деструкторе класса, чтобы убедиться, что семафоры завершены?
2 ответа
Если вы не вызываете sem_destroy для семафора, он неявно уничтожается при освобождении памяти, в которой находится семафор. Если ваш семафор находится в неразделенной памяти, его семафор уничтожается неявно, когда процесс вызывает exit или exec. Если семафор находится в общей памяти, он уничтожается после закрытия последнего процесса.
Да. В C++ динамически добавленные объекты не уничтожаются автоматически, и вы должны уничтожить любой созданный вами объект с помощью указателя следующим образом:
semaphore *S = ...