2015-01-30 3 views
5

У меня есть блокировка в сторонней библиотеке, которую я не контролирую. Это может потенциально уйти навсегда. Поэтому я хочу установить таймаут на нем. Очевидным способом является обернуть его каналом и goroutine, а затем выбрать результат с помощью time.After. Тем не менее, проблема в том, что goroutine, выполняющий операцию блокировки, может потенциально уйти навсегда.отменить операцию блокировки в Go

Ниже приведен пример для иллюстрации этого http://repl.it/90o

Есть ли способ, чтобы отменить goroutine или иметь его мусор?

+2

Является ли библиотека сторонних разработчиков открытым исходным кодом? Возможно, вы можете исправить это для них и отправить запрос на вытягивание. – tgrosinger

ответ

3

Вы не можете остановить горутин из «снаружи». Горотин должен поддерживать некоторую сигнализацию о завершении (чаще всего канал). Но если это не так, вы не можете заставить его или убить его.

Если вы ничего не можете сделать с помощью сторонней библиотеки, которую вы используете, то самое большее, что вы можете сделать, это запустить ее в другом процессе (в другом приложении, запущенном вашим приложением), которое вы можете убить, но это просто уродливо и слишком громоздко.

0

Я не думаю, что вы можете что-либо сделать. В Go вы не можете остановить горутин снаружи. Если вы не можете исправить эту библиотеку, и вы думаете, что она может блокироваться навсегда, тогда напишите новую, которую вы сможете контролировать.

 Смежные вопросы

  • Нет связанных вопросов^_^