совместное использование мьютексов между модулями - PullRequest
3 голосов
/ 26 апреля 2011

Как можно использовать взаимные исключения между модулями?

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

Мне нужно прочитать переменную в модуле создания потока ипотоки, которые выполняют функции из других #included модулей, изменяют переменную.Как происходит блокировка и разблокировка мьютексов в такой системе?

Например, модуль логики порождает 2 потока, каждый из которых выполняет функцию из другого модуля.Существует переменная с именем current position, которую необходимо прочитать из логического модуля, если, например, другой модуль вызывает getCurrentPosition.Как эти многопоточные функции, существующие за пределами логического модуля, используют мьютексы, определенные в логическом модуле?

Потоковые функции должны блокировать и разблокировать мьютекс, определенный в логическом модуле.

Ответы [ 2 ]

3 голосов
/ 26 апреля 2011

Вы можете использовать мьютекс так же, как вы объявляете и используете переменную extern "current position". Здесь нет большой разницы.

extern pthread_mutex_t mtx;
extern int current_position;
0 голосов
/ 26 апреля 2011

Мьютекс обычно используется с указателем на объект мьютекса. Итак, вы должны передать указатель на один и тот же объект в оба модуля, а затем использовать мьютекс как обычно.

Вы можете добавить extern mutex_type mutex1; объявление указателя мьютекса в файл заголовка, общий для обоих модулей, но определить его в одном модуле с помощью mutex_type mutex1;. Тогда вы можете использовать &mutex1 в обоих модулях.

...