Очистка ресурсов в Эрланге - PullRequest
2 голосов
/ 16 февраля 2012

Возможно ли в Erlang автоматически вызывать функцию очистки, когда исчезают все ссылки на ресурс?Например, будет ли когда-либо закрыт собственный дескриптор файла, который открывается путем вызова file:open/2, если никогда не вызывается file:close/1?Если это возможно, как это сделать?Если это невозможно, существуют ли идиомы Эрланга, которые делают утечки ресурсов, как это, не проблемой?

1 Ответ

5 голосов
/ 16 февраля 2012

Из документации file :

IoDevice - это действительно pid процесса, который обрабатывает файл.Этот процесс связан с процессом, который первоначально открыл файл.Если какой-либо процесс, с которым связан IoDevice, завершается, файл будет закрыт, а сам процесс будет завершен.IoDevice, возвращаемый этим вызовом, может использоваться в качестве аргумента для функций ввода-вывода (см. Io (3)).

Таким образом, если процесс, открывший файл, умирает, файл будет закрыт автоматически.

Если вы используете OTP и хотите быть абсолютно уверены, что ваш файл был закрыт, когда ваш процесс умирает, добавьте file:close к функции terminate.Конечно, ваш gen_ * должен быть прикреплен к руководителю.

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