Мутекс в геттер-сеттер - PullRequest
       1

Мутекс в геттер-сеттер

1 голос
/ 16 сентября 2011

Мне было интересно, как использовать mutex для многопоточного приложения.Мои геттеры тоже должны блокироваться?Я нашел этот пост.Ответ - да, мне нужно охранять функции получателей, но это означает, что я смогу выполнять по одному чтению за раз, и мне интересно, можно ли его улучшить.предполагает, что вы можете реализовать блокировки таким образом, чтобы многие потоки могли считывать данные одновременно, если функции установщиков не блокировали мьютекс для выполнения записи.Я попытался найти некоторые примеры - читая документацию Qt - подумал, что в QMutex нет функции isLocked () или чего-то в этом роде.Так как же вы можете практично реализовать этот вид «умных замков».

Спасибо

Ответы [ 2 ]

5 голосов
/ 16 сентября 2011

Вам необходим специальный вид механизма блокировки, называемый Блокировка чтения-записи .С помощью этой блокировки любое количество читателей может одновременно получить доступ к ресурсу, но для того, чтобы у писателя был доступ, все потоки читателей должны быть заблокированы.

Похоже, в Qt есть класс QReadWriteLock , который реализует этот механизм.

3 голосов
/ 16 сентября 2011

Да, вам нужно синхронизировать доступ к вашим геттерам, чтобы не блокировать их в общих чертах, поскольку они ничего не изменяют, а чтобы неявно устанавливать барьер памяти . Таким образом, многопоточные операции будут расположены в правильном порядке, и ваши получатели не будут читать частично измененные данные.

Вам не нужны интеллектуальные блокировки, потому что мьютекс читателя-писателя не даст вам никакой выгоды .

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