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


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

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

Windows 8

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

DeleteSynchronizationBarrier

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

EnterSynchronizationBarrier

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

GetOverlappedResultEx

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

InitializeSynchronizationBarrier

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

WaitOnAddress

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

WakeByAddressAll

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

WakeByAddressSingle

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

Новые функции с блокировкой

InterlockedAddNoFence

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

InterlockedAddNoFence64

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

InterlockedAndNoFence

Выполняет атомарную операцию 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-разрядным значением на основе результатов сравнения. Обмен выполняется семантикой упорядочения памяти выпуска.

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-разрядной переменной в виде атомарной операции. Операция выполняется с помощью семантики упорядочения памяти выпуска.

InterlockedIncrement16NoFence

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

InterlockedIncrementNoFence64

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

InterlockedOrNoFence

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

InterlockedOr8NoFence

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

InterlockedOr16NoFence

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

InterlockedOr64NoFence

Выполняет атомарную операцию ИЛИ с указанными значениями 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.