2009-11-21 5 views
6

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

Кроме того, возможно ли, чтобы другой поток считывал адрес памяти, когда биты находятся в неустойчивом состоянии?

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

+0

только для уточнения, это единственное целое – Mark

ответ

0

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

5

Я думаю, что все это зависит от «модели памяти» для вашего конкретного языка программирования или системы.

+0

Очень важно, так как в зависимости от сложности различных частей (язык, оборудование, ОС, модель потока и т. Д.), То возможен любой из сценариев. – workmad3

+0

C++ на любой аппаратной платформе – Mark

2

Эти вопросы являются основами системы или/или модели памяти языка программирования. Поэтому выберите свою собственную ОС и язык программирования, прочитайте спецификации, и вы увидите.

0

На многопроцессорном компьютере может быть не одно «значение», которое считывается. Два потока, а третий, могут видеть несогласованные значения. Вам понадобится барьер памяти, чтобы каждый поток видел одно и то же значение по этому адресу.

Кроме того, записи, как правило, являются атомарными, поэтому это будет либо один, либо другой из значений, которые были написаны (или были там в первую очередь), которые читаются. Вы не говорите об альфа-процессоре, не так ли?

1

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

Если вы хотите прочитать, бумага Boehm «Threads cannot be implemented as a library» охватывает этот и другие причуды параллелизма.