Существует эта мультиплатформенная (Windows, Linux, Cygwin) динамическая библиотека, которая загружается во время выполнения исполняемым файлом Cygwin. В какой-то момент, во время нормального рабочего процесса, DLL выделяет пул потоков для использования. Эти потоки управляются как глобальные переменные (подсчет ссылок). Поэтому, когда клиентский процесс завершает работу, он начинает освобождать глобальные объекты, потоки также должны быть освобождены.
Проблема, как я понимаю, заключается в том, что во время завершения процесса блокировка загрузчика получается, и дальше по улице потоки хотят установить такую же блокировку, и теперь у нас тупик.
Теперь я прошу совета, как мы можем сделать хорошее отключение?
DLL не имеет методов init()
или uninit()
для вызова. В лучшем случае клиент может быть дополнен некоторым кодом до конца main ()
(то есть до завершения процесса).
Если я отсоединяю потоки, а не соединяю их, во время очистки глобальной переменной память становится поврежденной. Если я их прерву, у нас будут отвратительные дампы процессов.
Кстати, под Linux я не вижу таких проблем.
DLL - это только C ++ 14, клиент - C99 (Cygwin).
Я пытался прояснить ситуацию, но дайте мне знать, если у вас есть дополнительные вопросы. Заранее спасибо за любые идеи.