mutable boost :: mutex можно ли разделить функции блокировки и ожидания? - PullRequest
1 голос
/ 26 августа 2011

Итак, у меня есть такие функции, как read, которые можно вызывать одновременно из нескольких потоков. но также у меня есть функция для write, которая должна заблокировать все эти read функции. Где взять пример создания такой архетектуры?

Я понимаю, что мы можем иметь:

mutable boost::mutex the_read_mutex;
mutable boost::mutex the_write_mutex;

и

void write()
{
    // make all new readers wait and wait for all other currently running read threads();
}

void read()
{
    // do not make all new readers wait, and wait for all currently running write thread()
}

Так как это сделать?

1 Ответ

4 голосов
/ 26 августа 2011

Вы можете использовать

boost::shared_mutex  m

Reader()
 shared_lock   lock(m)

Writer()
 upgradeable_lock lck(m)
 upgrade_to_unique_lock uniqueLock(lck);

Чтобы узнать больше о буст-блокировках: Механизмы синхронизации потоков повышения

Чтобы узнать о классе проблемы, с которой вы имеете дело: Wikpedia Link to Reader-WriterLock

Чтобы узнать больше о блокировке чтения-записи POSIX, которая напрямую дает вам блокировку чтения-записи с очень простым синтаксисом: Блокировки чтения-записи POSIX

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