Запрещает перемещение переменной в регистр. volatile – модификатор доступа, как и const. Могут быть volatile классы и функции. Снимается через const_cast<>; MS specific – к volatile атомарный доступ
Слабая модель позволяет переупорядычивание операций; Intel® 64 Architecture Memory Ordering White Paper Foundations of the C++ Concurrency Memory Model
заверены пока команда выполняется; sfence — все операции выгрузки должны быть заверешны пока команда выполняется; mfence — sfence + lfence; cpuid; interlocked операции.
x86 oostore AMD64 IA64 Loads reordered after Loads y y y y y Loads reordered after Stores y y y y y Stores reordered after Stores y y y y y Stores reordered after Loads y y y y y y y Atomic reordered with Loads y y y y Atomic reordered with Stores y y y y Dependent Loads reordered y Incoherent Instruction cache pipeline y y y y y y
SIZE/2; i++) { EnterCriticalSectio(&cs); sum += array[i]; LeaveCriticalSection(&cs); } for(int i = 0; i < SIZE/2; i++) { EnterCriticalSectio(&cs); sum += array[i + SIZE/2]; LeaveCriticalSection(&cs); } int sum = 0; int array[SIZE]; CRITICAL_SECTION cs;
Obstruction-free (без препятствий) – поток завершит исполнение за детерменированное количество шагов; Lock-free (без блокировок) – на каждом шаге происходит прогресс в системе; Wait-free (без ожиданий) – нет ожиданий.