присоединение к ветке: «ресурс заблокирован» - PullRequest
0 голосов
/ 06 мая 2019

Я использую класс c ++, который инкапсулирует boost :: asio :: io_service .

class IoService {
 public:
  static IoService& getInstance() {
    static IoService instance;
    return instance;
  }
  void start() {
    _ioServiceThread = std::thread(&IoService::run, this);
  }
  void stop() {
    _ioService.stop();
    _ioServiceThread.join();
  }
  void run() {
   _ioService.run();
  }

 private:
  IoService();
  ~IoService();
  IoService(const IoService& old) = delete;
  IoService(const IoService&& old) = delete;
  IoService& operator=(const IoService& old) = delete;
  IoService& operator=(const IoService&& old) = delete;

  boost::asio::io_service _ioService;
  std::thread _ioServiceThread;
};

Но когда я вызываю метод stop, программа падает при соединении:

terminate called after throwing an instance of 'std::system_error'
what():  Resource deadlock avoided
Aborted

Как вы думаете?

1 Ответ

0 голосов
/ 07 мая 2019

Это ошибка, которую вы получаете, когда поток пытается присоединиться к себе.

Похоже, ваша проблема в том, что вы вызываете метод stop() из функции-обработчика, которая была вызвана io_service.

...