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

я есть родительский и рабочий поток, которые разделяют флаг bool и std :: vector. Родитель читает только (то есть читает bool или вызывает my_vector.empty ()); рабочий только пишет.

Мои вопросы:

Нужно ли мьютекс защищать флаг bool?

Могу ли я сказать, что все операции чтения / записи bool по своей сути являются атомарными операциями? Если вы скажете «да» или «нет», откуда вы получили информацию?

Я недавно слышал оGCC Атомно-встроенный, Могу ли я использовать их, чтобы сделать мой флаг доступным для чтения / записи без использования мьютексов? В чем разница? Я понимаю, что встроенные функции Atomic сводятся к машинному коду, но даже мьютексы сводятся к инструкциям барьера памяти процессора, верно? Почему люди называют мьютексы конструкцией "уровня ОС"?

Нужно ли мьютекс защищать мой std :: vector? Напомним, что рабочий поток заполняет этот вектор, в то время как родитель вызывает для него только empty () (т.е. только читает его)

Я не верю, что мьютексная защита необходима как для bool, так и для вектора. Я объясняю это следующим образом: «Хорошо, если я прочитаю разделяемую память непосредственно перед ее обновлением ... это все еще хорошо, я получу обновленное значение в следующий раз. Что еще более важно, я не понимаю, почему писатель должен быть заблокирован, пока чтение читает, потому что, в конце концов, читатель только читает!

Если кто-то может указать мне правильное направление, это было бы просто замечательно. Я на GCC 4.3, а Intel x86 32-разрядная. Большое спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос