Udostępnij za pośrednictwem


Co nowego w synchronizacji

System Windows zawiera następujące nowe elementy programowania na potrzeby synchronizacji.

Windows 8

Nowe funkcje

DeleteSynchronizationBarrier

Usuwa barierę synchronizacji.

EnterSynchronizationBarrier

Powoduje, że wątek wywołujący czeka na barierę synchronizacji, aż maksymalna liczba wątków wejdzie w barierę.

GetOverlappedResultEx

Pobiera wyniki nakładającej się operacji na określonym pliku, nazwanym potoku lub urządzeniu komunikacyjnym w określonym przedziale czasu. Wątek wywołujący może wykonać oczekiwanie z możliwością odbioru alertów.

InitializeSynchronizationBarrier

Określa maksymalną liczbę wątków i liczbę spinów dla nowej bariery synchronizacji.

WaitOnAddress

Czeka na zmianę wartości pod określonym adresem.

WakeByAddressAll

Budzi wszystkie wątki oczekujące na zmianę wartości adresu.

WakeByAddressSingle

Wznawia jeden wątek (thread), który oczekuje na zmianę wartości adresu.

Nowe funkcje połączone

InterlockedAddNoFence

Wykonuje atomową operację dodawania dla określonych wartości LONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedAddNoFence64

Wykonuje operację atomową dodawania dla określonych wartości LONGLONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedAndNoFence

Wykonuje atomową operację AND na określonych wartościach LONG. Operacja jest wykonywana atomicznie, ale bez użycia barier pamięci.

InterlockedAnd8NoFence

Wykonuje atomową operację AND na określonych wartościach znaków char. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedAnd16NoFence

Wykonuje atomową operację AND na określonych wartościach SHORT. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedAnd64NoFence

Wykonuje atomową operację AND na określonych wartościach typu LONGLONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedBitTestAndComplement64

Sprawdza określony bit określonej wartości LONG64 i uzupełnia go. Operacja jest niepodzielna.

InterlockedBitTestAndResetAcquire

Testuje określony bit określonej wartości LONG i ustawia go na 0. Operacja jest niepodzielna i jest wykonywana przy użyciu semantyki porządkowania pamięci.

InterlockedBitTestAndResetRelease

Testuje określony bit określonej wartości LONG i ustawia go na 0. Operacja jest niepodzielna i jest wykonywana przy użyciu semantyki zwalniania pamięci.

InterlockedBitTestAndSetAcquire (Testowanie i ustawianie zablokowanego bitu z przejęciem)

Sprawdza określony bit określonej wartości LONG i ustawia go na 1. Operacja jest niepodzielna i jest wykonywana przy użyciu semantyki porządkowania pamięci.

InterlockedBitTestAndSetRelease

Sprawdza określony bit określonej wartości LONG i ustawia go na 1. Operacja jest atomowa i wykonywana z semantyką uporządkowania pamięci dla operacji zwalniających.

InterlockedCompareExchangeNoFence

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 32-bitowe i wymienia się z inną wartością 32-bitową na podstawie wyniku porównania. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedCompareExchange16

Wykonuje atomową operację porównywania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 16-bitowe i wymienia się z inną wartością 16-bitową na podstawie wyniku porównania.

InterlockedCompareExchange16Acquire

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 16-bitowe i wymienia się z inną wartością 16-bitową na podstawie wyniku porównania. Operacja jest wykonywana przy użyciu semantyki porządkowania pamięci typu acquire.

InterlockedCompareExchange16Release

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 16-bitowe i wymienia się z inną wartością 16-bitową na podstawie wyniku porównania. Wymiana jest wykonywana przy użyciu semantyki porządkowania pamięci wydania.

InterlockedCompareExchange16NoFence

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 16-bitowe i wymienia się z inną wartością 16-bitową na podstawie wyniku porównania. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedCompareExchangeNoFence64

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 64-bitowe i wymienia się z inną wartością 64-bitową na podstawie wyniku porównania. Operacja jest wykonywana atomowo, ale bez użycia barier pamięciowych.

InterlockedCompareExchange128

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości 128-bitowe i wymienia się z inną wartością 128-bitową na podstawie wyniku porównania.

InterlockedCompareExchangePointerNoFence

Wykonuje atomową operację porównania i wymiany na określonych wartościach. Funkcja porównuje dwie określone wartości wskaźnika i zamienia jedną wartość wskaźnika na inną w oparciu o wynik porównania. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedDecrementNoFence

Zmniejsza (zmniejsza o jeden) wartość określonej zmiennej 32-bitowej jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedDecrement16

Dekrementuje (zmniejsza się o jeden) wartość określonej zmiennej 16-bitowej jako operacja niepodzielna.

InterlockedDecrement16Acquire

Dekrementuje wartość określonej zmiennej 16-bitowej jako operacja atomowa. Operacja jest wykonywana przy użyciu semantyki porządkowania pamięci typu acquire.

InterlockedDecrement16Release

Dekrementuje (zmniejsza wartość o jeden) wartość określonej zmiennej 16-bitowej jako operacja atomowa. Operacja jest wykonywana przy użyciu semantyki pamięci o porządku wydania.

InterlockedDecrement16NoFence

Dekrementuje (zmniejsza o jeden) wartość określonej zmiennej 16-bitowej jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedDecrementNoFence64

Dekrementuje (zmniejsza o jeden) wartość określonej zmiennej 64-bitowej jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedExchangeNoFence

Ustawia zmienną 64-bitową na określoną wartość jako operację niepodzielną. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedExchange8

Ustawia zmienną 8-bitową na określoną wartość jako operację atomową.

InterlockedExchange16Acquire

Ustawia 16-bitową zmienną na określoną wartość jako operację niepodzielną. Operacja jest wykonywana przy użyciu semantyki porządkowania pamięci.

InterlockedExchange16NoFence

Ustawia zmienną 16-bitową na określoną wartość jako operację atomową. Operacja jest wykonywana atomowo, ale bez użycia barier w pamięci.

InterlockedExchangeNoFence64

Ustawia zmienną 64-bitową na określoną wartość jako operację atomową. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedExchangePointerNoFence

Atomowa wymiana pary adresów. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedExchangeAddNoFence

Wykonuje atomowe dodanie dwóch wartości 32-bitowych. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedExchangeAddNoFence64

Wykonuje atomowe dodawanie dwóch wartości 64-bitowych. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedIncrementNoFence

Zwiększa wartość określonej zmiennej 32-bitowej o jeden jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedIncrement16

Inkremetuje wartość określonej zmiennej 16-bitowej o jeden jako operacja atomowa.

InterlockedIncrement16Acquire

Zwiększa (o jeden) wartość określonej zmiennej 16-bitowej jako operacja atomowa. Operacja jest wykonywana przy użyciu semantyki porządkowania pamięci.

InterlockedIncrement16Release

Zwiększa wartość określonej zmiennej 16-bitowej o jeden jako operacja atomowa. Operacja jest wykonywana przy użyciu semantyki porządkowania pamięci wydania.

InterlockedIncrement16NoFence

Zwiększa (zwiększa o jeden) wartość określonej zmiennej 16-bitowej jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedIncrementNoFence64

Inkrementuje (zwiększa wartość o jeden) określoną zmienną 64-bitową jako operacja atomowa. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedOrNoFence

Wykonuje atomową operację OR na określonych wartościach LONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedOr8NoFence

Wykonuje atomową operację OR na określonych wartościach char. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedOr16NoFence

Wykonuje atomową operację OR na określonych wartościach SHORT. Operacja jest wykonywana niepodzielnie, ale bez użycia barier pamięci.

InterlockedOr64NoFence

Wykonuje atomową operację OR na określonych wartościach LONGLONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięciowych.

InterlockedPushListSListEx

Wstawia listę jednokierunkową na początku innej listy jednokierunkowej. Dostęp do list jest synchronizowany w systemie wieloprocesorowym. Ta wersja metody nie używa __fastcall konwencji wywoływania.

InterlockedXorNoFence

Wykonuje atomową operację XOR na określonych wartościach LONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedXor8NoFence

Wykonuje atomową operację XOR na określonych wartościach char. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedXor16NoFence

Wykonuje atomową operację XOR na określonych wartościach SHORT. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

InterlockedXor64NoFence

Wykonuje atomową operację XOR dla podanych wartości LONGLONG. Operacja jest wykonywana atomowo, ale bez użycia barier pamięci.

Windows 7

Nowe funkcje

SetWaitableTimerEx

Aktywuje określony czasomierz oczekiwania i udostępnia informacje kontekstowe czasomierza.

Próba przejęcia wyłącznej blokady SRW za pomocą TryAcquireSRWLockExclusive

Próbuje uzyskać lekką blokadę czytania/pisania (SRW) w trybie wyłącznym. Jeśli wywołanie zakończy się sukcesem, wątek wywołujący przejmuje blokadę na własność.

TryAcquireSRWLockShared

Próbuje uzyskać lekką blokadę czytnika/zapisywacza (SRW) w trybie udostępnionym. Jeśli wywołanie zakończy się pomyślnie, wątek wywołujący przejmuje własność blokady.

Nowe struktury

REASON_CONTEXT

Zawiera informacje kontekstowe dla czasomierza aktywowanego za pomocą SetWaitableTimerEx.