(J) Руби - хорошо ли убивать нить? - PullRequest
3 голосов
/ 07 марта 2011

В Java не стоит останавливать потоки.Итак, мне интересно, нормально ли это (Thread.exit) в Ruby?

(FWIW, я использую разновидность Ruby Ruby)

Ответы [ 2 ]

2 голосов
/ 07 марта 2011

В общем случае принудительная остановка потоков или всегда противопоказана, поскольку вы не можете гарантировать чистое освобождение ресурсов и блокировки, которые удерживает поток. Так что Ник прав, переменная, указывающая, что пора потоку самому закрывать , обычно лучше.

Однако в вашем случае, вероятно, нет другого варианта, кроме как принудительно уничтожить поток. Самым безопасным маршрутом будет поток # поднять что-то в потоке, чтобы обеспечить нормальную обработку исключений и обеспечить блоки для очистки ресурсов. Но, конечно, это может быть спасено пользователем. Тем не менее, JRuby должен также запускать блоки обеспечения в ответ на неустранимое уничтожение Thread #. В любом случае вы не можете гарантировать, что не прерываете выполнение блока обеспечения, но для вашего случая это приемлемый риск.

0 голосов
/ 07 марта 2011

Я вообще ничего не знаю о Ruby, но я все же думаю, что, вероятно, безопаснее иметь переменную или флаг, указывающий, когда вы хотите завершить поток. Затем вы можете безопасно завершить запись в память и закрыть ресурсы, которые могли быть открыты.

N

...