Поделиться через


Новые возможности синхронизации

Windows включает следующие новые элементы программирования для синхронизации.

Windows 8

Новые функции

УдалитьСинхронизационныйБарьер

Удаляет барьер синхронизации.

EnterSynchronizationBarrier

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

GetOverlappedResultEx

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

ИнициализацияБарьераСинхронизации

Задает максимальное количество потоков и число спинов для нового барьера синхронизации.

WaitOnAddress

Ожидает изменения значения по указанному адресу.

WakeByAddressAll

Пробуждение всех потоков, ожидающих изменения значения адреса.

WakeByAddressSingle

Пробуждение одного потока, ожидающего изменения значения адреса.

Новые взаимосвязанные функции

InterlockedAddNoFence

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

InterlockedAddNoFence64

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

ПереплетеноБезОграждения

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

InterlockedAnd8NoFence

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

InterlockedAnd16NoFence

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

InterlockedAnd64NoFence

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

InterlockedBitTestAndComplement64

Проверяет указанный бит указанного значения LONG64 и дополняет его. Операция атомарна.

InterlockedBitTestAndResetAcquire

Проверяет указанный бит указанного значения LONG и задает для него значение 0. Операция атомарна и выполняется с семантикой упорядочивания памяти.

InterlockedBitTestAndResetRelease

Проверяет указанный бит указанного значения LONG и задает для него значение 0. Операция атомарна и выполняется с помощью семантики выпуска памяти.

InterlockedBitTestAndSetAcquire

Проверяет указанный бит указанного значения LONG и задает для него значение 1. Операция атомарна и выполняется с семантикой упорядочивания памяти.

InterlockedBitTestAndSetRelease

Проверяет указанный бит указанного значения LONG и задает для него значение 1. Операция является атомарной и выполняется с семантикой упорядоченного освобождения памяти.

InterlockedCompareExchangeNoFence

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 32-разрядных значения и обменивается еще одним 32-разрядным значением на основе результата сравнения. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedCompareExchange16

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 16-разрядных значения и обменивается еще одним 16-разрядным значением на основе результата сравнения.

InterlockedCompareExchange16Acquire

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 16-разрядных значения и обменивается еще одним 16-разрядным значением на основе результата сравнения. Операция выполняется с семантикой упорядочения памяти.

InterlockedCompareExchange16Release

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 16-разрядных значения и обменивается еще одним 16-разрядным значением на основе результата сравнения. Обмен выполняется с семантикой упорядочивания памяти по принципу release.

InterlockedCompareExchange16NoFence

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 16-разрядных значения и обменивается еще одним 16-разрядным значением на основе результата сравнения. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedCompareExchangeNoFence64

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 64-разрядных значения и обменивается еще одним 64-разрядным значением на основе результата сравнения. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedCompareExchange128

Выполняет атомарную операцию сравнения и обмена указанными значениями. Функция сравнивает два указанных 128-разрядных значения и обменивается еще одним 128-разрядным значением на основе результата сравнения.

InterlockedCompareExchangePointerNoFence

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

InterlockedDecrementNoFence

Уменьшает на единицу значение указанной 32-разрядной переменной как атомарная операция. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedDecrement16

Уменьшает (на единицу) значение указанной 16-разрядной переменной как атомарная операция.

InterlockedDecrement16Acquire

Уменьшает значение указанной 16-разрядной переменной на единицу как атомарную операцию. Операция выполняется с семантикой упорядочения памяти.

InterlockedDecrement16Release

Уменьшает значение указанной 16-разрядной переменной как атомарная операция. Операция выполняется с семантикой упорядочивания памяти выпуска.

InterlockedDecrement16NoFence

Декрементирует (уменьшает на один) значение указанной 16-разрядной переменной как атомарная операция. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedDecrementNoFence64

Уменьшает значение указанной 64-разрядной переменной на один как атомарная операция. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchangeNoFence

Задает 64-разрядную переменную заданному значению как атомарную операцию. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchange8

Задает 8-разрядную переменную в указанное значение как атомарную операцию.

InterlockedExchange16Acquire

Задает 16-разрядную переменную в указанное значение как атомарную операцию. Операция выполняется с помощью семантики упорядочения памяти.

InterlockedExchange16NoFence

Задает 16-разрядную переменную в указанное значение как атомарную операцию. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchangeNoFence64

Задает 64-разрядную переменную заданному значению как атомарную операцию. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchangePointerNoFence

Атомарный обмен парой адресов. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchangeAddNoFence

Выполняет атомарное добавление двух 32-разрядных значений. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedExchangeAddNoFence64

Выполняет атомарное добавление двух 64-разрядных значений. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedIncrementNoFence

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

InterlockedIncrement16

Увеличивает значение указанной 16-разрядной переменной на один как атомарная операция.

InterlockedIncrement16Acquire

Увеличивает (увеличивает на один) значение указанной 16-разрядной переменной как атомарная операция. Операция выполняется с помощью семантики упорядочения памяти.

InterlockedIncrement16Release

Увеличивается (увеличивается на один) значение указанной 16-разрядной переменной в виде атомарной операции. Операция выполняется с помощью семантики упорядочения памяти по принципу release order.

InterlockedIncrement16NoFence

Значение указанной 16-разрядной переменной увеличивается на один в качестве атомарной операции. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedIncrementNoFence64

Увеличивает значение указанной 64-разрядной переменной на один в качестве атомарной операции. Операция выполняется атомарно, но без использования барьеров памяти.

InterlockedOrNoFence

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

InterlockedOr8NoFence

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

InterlockedOr16NoFence

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

InterlockedOr64NoFence

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

InterlockedPushListSListEx

Вставляет односвязный список в начало другого односвязного списка. Доступ к спискам синхронизируется в многопроцессорной системе. Эта версия метода не использует соглашение о вызовах __fastcall.

InterlockedXorNoFence

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

InterlockedXor8NoFence

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

InterlockedXor16NoFence

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

InterlockedXor64NoFence

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

Windows 7

Новые функции

SetWaitableTimerEx

Активирует указанный таймер ожидания и предоставляет сведения о контексте таймера.

TryAcquireSRWLockExclusive

Пытается получить блокировку средства чтения или записи (SRW) в монопольном режиме. Если вызов выполнен успешно, вызывающий поток получает владение блокировкой.

TryAcquireSRWLockShared

Пытается получить блокировку замка чтения/записи (SRW) в общем режиме. Если вызов выполнен успешно, вызывающий поток берет во владение блокировку.

Новые структуры

REASON_CONTEXT

Содержит сведения о контексте таймера, активированного с помощью SetWaitableTimerEx.