У меня есть приложение с двумя потоками. Один поток разветвляется по событию, а другой поток делает что-то, что приводит к большому количеству вызовов getaddrinfo(). Я сталкиваюсь с проблемой, когда в некоторых случаях разветвленный дочерний элемент зависает на мьютексе внутри вызова getaddrinfo().
Теперь я понимаю, что это происходит только тогда, когда дочерний процесс разветвляется, а второй поток в родительском процессе находится в вызове getaddinfo(). Это приводит к тупиковой ситуации, поскольку дочерний процесс наследует родительскую блокировку, но никогда не освобождает ее.
Мой вопрос: как можно решить эту проблему, когда сам системный вызов блокируется? Что ж, один из способов исправить это — синхронизировать системный вызов fork и вызов getaddrinfo в обоих потоках. Но есть ли другой способ сделать это?
Спасибо!