Требуется ли мьютекс в моем случае

0

У меня есть два потока, разделяющих переменную, но ни одна из них не записывает эту переменную. Я понимаю, что когда два потока динамически читают или записывают переменную, вам нужен мьютекс. Однако, поскольку я только читаю общую переменную из обоих потоков, мне все еще нужно использовать мьютекс?

PS Mine - это C++ программа, и я использую std :: mutex.

  • 1
    Вам не нужен мьютекс (или любая другая синхронизация) только для чтения.
  • 0
    Я не понизил голос, но я предполагаю, что он / она ожидает, что вы предоставите пример кода, чтобы мы могли дать лучший ответ. например, переменная int не требует блокировки, но long long будет
Теги:
multithreading
mutex
synchronization

2 ответа

2
Лучший ответ

Если переменная гарантирована, что ее нельзя изменить, то чтение не нуждается в мьютексе.

Но если:

  1. Возможно, что переменная написана (любым потоком), в то время как ваши потоки пытаются ее прочитать
  2. И, чтение/запись не являются атомарными

Затем вам нужно синхронизировать.

  • 0
    переменная не будет в наполовину записанном состоянии ... она защищена доступом к памяти на уровне аппаратного обеспечения
  • 0
    Зависит от типа переменной. Это C ++ помню.
Показать ещё 9 комментариев
1

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

  • 1
    ... и никакой другой поток не пишет в переменную, пока два потока читают из нее ... и до тех пор, пока нет mutable членов, которые изменяются внутри объекта как часть чтения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню