Задать вопрос

Работа с pthread mutex?

Приветствую.

Возник вопрос с работой 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 отрабатывает без ошибок. Проблема не критична, но очень хочется разобраться в сути. Вот тут нашел похожую проблему, однако без решения.


Буду крайне признателен за помощь в данном вопросе.
  • Вопрос задан
  • 6215 просмотров
Подписаться 3 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@gribozavr
Server srv(); — это объявление функции, а не создание объекта. После этого srv.f() вообще не должно скомпилироваться.

Если же написать Server srv; то у меня работает, давайте полный нерабочий код.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
25 дек. 2024, в 08:00
20000 руб./за проект
25 дек. 2024, в 07:53
20000 руб./за проект
25 дек. 2024, в 07:45
20000 руб./за проект