Будет ли блокировка мьютекса вне функции потока все еще блокировать поток? - PullRequest
0 голосов
/ 07 ноября 2018

Мне было интересно, есть ли у меня переменная блокировки мьютекса, совместно используемая несколькими классами, и в потоке я вызываю метод для объекта и блокирую переменную мьютекса в этом методе, будет ли он действовать соответствующим образом?

У меня есть следующий заголовок, включенный во все файлы моего проекта, чтобы я мог использовать блокировку мьютекса глобально

#ifndef THREADS
#define THREADS
#include <pthread.h>
extern pthread_mutex_t lock;
#define lock_thread() pthread_mutex_lock(&lock);
#define unlock_thread() pthread_mutex_unlock(&lock);
#endif

Таким образом, в моей функции потока я могу блокировать и разблокировать доступ к критическим разделам:

lock_thread();
user = create_user(username, password, ID++, license_num, preg, disability, vehicle_type);
unlock_thread();

Теперь после создания пользователя пользователь может получить доступ к определенным «действиям», для которых у него есть разрешения. Каждое действие - это свой собственный класс с методом execute.

Например:

Action newaction;
newaction.perform(socket, user.getID);

Я передаю сокет для текущего потока и ID пользователя, поскольку он будет взаимодействовать с базой данных. Теперь, если я решу выполнить «lock_thread ()» внутри метода execute, будет ли он работать аналогично блокировке его внутри самой функции потока?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...