Могу ли я предположить, что общие переменные OpenMP читаются и пишутся атомарно? - PullRequest
3 голосов
/ 15 февраля 2012

Например, предположим, что у меня есть переменная, к которой базовый процессор не может получить доступ в одной инструкции (например, 64-разрядное целое число в 32-разрядной архитектуре).

// let x, y, z of the same integral type of size > architecture
#pragma omp parallel shared(x), private(y,z)
  y = ...;
  z = ...;
  if (x == y)
    x = z;

Хотя междуif оператор и фактическое назначение, может ли половина x быть прочитана до переключения контекста, а другая половина - после?Или гарантируется, что доступ на чтение и запись к разделяемым переменным всегда происходит атомарно?Я не могу найти никаких заявлений по этому поводу в стандарте.

1 Ответ

0 голосов
/ 15 февраля 2012

Нет и нет.Этот код приведет к гонке ресурсов.

...