Как разделить глобальный объект между потоками?

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

Требуется, чтобы я сделал это в течение 3 потоков, у меня нет другого варианта.

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

Например. Я пытаюсь сделать...

globalObject.readColour();

это функция, которая считывает цвет глобального объекта.

Означает ли это, что я должен защитить поток в этот момент, или можно просто прочитать значение без каких-либо рисков?

Я работаю над mbed, который поддерживает c и c++98.


person Tryb Ghost    schedule 27.03.2019    source источник
comment
Если вы только читаете, то все в порядке. Вам просто нужно убедиться, что вы не пытаетесь читать, пока другой поток пытается писать. Это часто называют блокировкой чтения/записи. Идея состоит в том, что вы можете позволить одновременно читать столько потоков, сколько хотите, но как только одному потоку потребуется запись, вы должны остановить все чтение перед записью. std::shared_mutex может оказаться полезным.   -  person super    schedule 27.03.2019
comment
Возможный дубликат Использовать мьютекс или нет в параллельном чтении   -  person D. Ben Knoble    schedule 27.03.2019


Ответы (1)


Этот вопрос похож на этот

Если все ваши потоки будут только читать переменную, вам не нужен мьютекс (или аналогичный), но если какой-либо поток выполняет операцию записи, вы должны использовать мьютекс.

person aleci    schedule 27.03.2019
comment
К вашему сведению, вот документация Mutex для Mbed OS 5: Мьютекс. - person Jan Jongboom; 28.03.2019