Приветствую.
Возник вопрос с работой pthread_mutex_t и pthread_mutex_lock.
Есть класс многопоточного сервера:
class Server
{
private:
pthread_mutex_t _queryQueueMutex;
// ... code ...c
public:
Server();
bool f();
// ... code ...
};
Server::Server()
{
if (pthread_mutex_init(&_queryQueueMutex, NULL))
throw "err";
}
bool Server::f()
{
pthread_mutex_lock(&_queryQueueMutex);
// ... code ...
pthread_mutex_unlock(&_queryQueueMutex);
return false;
}
В котором для синхронизации некоторого действия потоков используется мьютекс (pthread_mutex_t _queryQueueMutex).
При создании объекта сервера как
Server* srv = new Server();
srv->f();
всё работает корректно, как и ожидается.
При создании объекта сервера как
Server srv();
srv.f();
выполнение потока останавливается на вызове pthread_mutex_lock(&_queryQueueMutex) в функции f().
Логика подсказывает что дело в инициализации мьютексов и выделении памяти, но никаких ошибок не возникает, pthread_mutex_trylock отрабатывает без ошибок. Проблема не критична, но очень хочется разобраться в сути. Вот
тут нашел похожую проблему, однако без решения.
Буду крайне признателен за помощь в данном вопросе.