Sdílet prostřednictvím


Novinky v synchronizaci

Systém Windows obsahuje následující nové programovací prvky pro synchronizaci.

Windows 8

Nové funkce

OdstranitSynchronizačníBariéru

Odstraní synchronizační bariéru.

EnterSynchronizationBarrier

Způsobí, že volající vlákno počká na synchronizační bariérě, dokud do bariéry nezasáhl maximální počet vláken.

GetOverlappedResultEx

Načte výsledky překrývající se operace v zadaném souboru, pojmenovaném kanálu nebo komunikačním zařízení v zadaném intervalu časového limitu. Volající vlákno může provádět pozastavitelný čekací stav.

InicializovatSynchroBarieru

Určuje maximální počet vláken a otáčky pro novou synchronizační bariéru.

WaitOnAddress

Čeká na změnu hodnoty na zadané adrese.

WakeByAddressAll

Probouzí všechna vlákna, která čekají na změnu hodnoty adresy.

WakeByAddressSingle

Probudí jedno vlákno, které čeká na změnu hodnoty adresy.

Nové vzájemně propojené funkce

InterlockedAddNoFence

Provede operaci atomového sčítání na zadaných hodnotách LONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedAddNoFence64

Provede operaci atomového sčítání u zadaných hodnot LONGLONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedAndNoFence

Provede atomické operace AND se zadanými hodnotami LONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedAnd8NoFence

Provede atomovou operaci AND na zadaných znakových hodnotách. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedAnd16NoFence

Provede atomické operace AND se zadanými hodnotami SHORT. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedAnd64NoFence

Provede atomické operace AND se zadanými hodnotami LONGLONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedBitTestAndComplement64

Otestuje zadaný bit zadané hodnoty LONG64 a doplní ji. Operace je atomická.

InterlockedBitTestAndResetAcquire

Otestuje zadaný bit zadané hodnoty LONG a nastaví ho na hodnotu 0. Operace je atomická a provádí se sémantikou řazení paměti.

interlockedBitTestAndResetRelease

Otestuje zadaný bit zadané hodnoty LONG a nastaví ho na hodnotu 0. Operace je atomická a provádí se pomocí sémantiky uvolnění paměti.

InterlockedBitTestAndSetAcquire

Otestuje zadaný bit zadané hodnoty LONG a nastaví ho na 1. Operace je atomická a provádí se se sémantikou pořadí paměti typu acquire.

interlockedBitTestAndSetRelease

Otestuje zadaný bit zadané hodnoty LONG a nastaví ho na 1. Operace je atomická a provádí se s uvolňovací paměťovou pořadovou sémantikou.

InterlockedCompareExchangeNoFence

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 32bitové hodnoty a vymění s jinou 32bitovou hodnotou na základě výsledku porovnání. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedCompareExchange16

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 16bitové hodnoty a vymění s jinou 16bitovou hodnotou na základě výsledku porovnání.

InterlockedCompareExchange16Acquire

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 16bitové hodnoty a vymění s jinou 16bitovou hodnotou na základě výsledku porovnání. Operace se provádí s využitím sémantiky řazení paměti.

InterlockedCompareExchange16Release

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 16bitové hodnoty a vymění s jinou 16bitovou hodnotou na základě výsledku porovnání. Výměna se provádí se sémantikou paměťového uspořádání při uvolňování.

InterlockedCompareExchange16NoFence

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 16bitové hodnoty a vymění s jinou 16bitovou hodnotou na základě výsledku porovnání. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedCompareExchangeNoFence64

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 64bitové hodnoty a vymění s jinou 64bitovou hodnotou na základě výsledku porovnání. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedCompareExchange128

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané 128bitové hodnoty a vymění s jinou 128bitovou hodnotou na základě výsledku porovnání.

InterlockedCompareExchangePointerNoFence

Provede atomovou operaci porovnání a výměny zadaných hodnot. Funkce porovnává dvě zadané hodnoty ukazatele a vymění se jinou hodnotou ukazatele na základě výsledku porovnání. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedDecrementNoFence

Sníží hodnotu zadané 32bitové proměnné o jedna jako atomická operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedDecrement16

Snižuje hodnotu zadané 16bitové proměnné o jednu, a to jako atomická operace.

InterlockedDecrement16Acquire

Sníží hodnotu zadané 16bitové proměnné o jednu jako atomická operace. Operace se provádí s využitím sémantiky řazení paměti.

InterlockedDecrement16Release

Sníží o jednu jednotku hodnotu zadané 16bitové proměnné v rámci atomické operace. Operace se provádí sémantikou uvolněného řazení paměti.

InterlockedDecrement16NoFence

Jako atomická operace sníží hodnotu zadané 16bitové proměnné o jednu. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedDecrementNoFence64

Sníží hodnotu zadané 64bitové proměnné o jedna jako atomická operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchangeNoFence

Nastaví 64bitovou proměnnou na zadanou hodnotu jako atomická operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchange8

Nastaví 8bitovou proměnnou na zadanou hodnotu jako atomická operace.

InterlockedExchange16Acquire

Nastaví 16bitovou proměnnou na zadanou hodnotu jako atomická operace. Operace se provádí pomocí sémantiky řazení paměti typu acquire.

InterlockedExchange16NoFence

Nastavit 16bitovou proměnnou na zadanou hodnotu jako atomickou operaci. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchangeNoFence64

Nastaví 64bitovou proměnnou na zadanou hodnotu jako atomická operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchangePointerNoFence

Atomicky vyměňuje dvojici adres. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchangeAddNoFence

Provede atomické sčítání dvou 32bitových hodnot. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedExchangeAddNoFence64

Provede atomické sčítání dvou 64bitových hodnot. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedIncrementNoFence

Zvýší (zvýší o jednu) hodnotu zadané 32bitové proměnné jako atomické operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedIncrement16

Zvýší hodnotu zadané 16bitové proměnné o jednu jako atomická operace.

InterlockedIncrement16Acquire

Zvýší (zvýší o jednu) hodnotu zadané 16-bitové proměnné jako atomická operace. Operace se provádí pomocí sémantiky řazení paměti.

InterlockedIncrement16Release

Zvýší (zvýší o jednu) hodnotu zadané 16bitové proměnné jako atomická operace. Operace se provádí pomocí sémantiky uvolňovacího uspořádání paměti.

InterlockedIncrement16NoFence

Zvýší (zvýší o jednu) hodnotu zadané 16bitové proměnné jako atomické operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedIncrementNoFence64

Zvýší (zvýší o jednu) hodnotu zadané 64bitové proměnné jako atomická operace. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedOrNoFence

Provede atomické operace OR se zadanými hodnotami LONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedOr8NoFence

Provede nedělitou operaci OR na zadaných hodnotách znaku. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedOr16NoFence

Provede atomické operace OR se zadanými hodnotami SHORT. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedOr64NoFence

Provede atomické operace OR se zadanými hodnotami LONGLONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedPushListSListEx

Vloží jednosměrně propojený seznam na začátek jiného jednosměrně propojeného seznamu. Přístup k seznamům se synchronizuje v multiprocesorovém systému. Tato verze metody nepoužívá __fastcall konvenci volání.

InterlockedXorNoFence

Provede atomickou operaci XOR na zadané hodnoty LONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedXor8NoFence

Provede atomickou operaci XOR na zadaných char hodnotách. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedXor16NoFence

Provede atomickou operaci XOR se zadanými hodnotami SHORT. Operace se provádí atomicky, ale bez použití paměťových bariér.

InterlockedXor64NoFence

Provádí atomickou XOR operaci se zadanými hodnotami LONGLONG. Operace se provádí atomicky, ale bez použití paměťových bariér.

Windows 7

Nové funkce

SetWaitableTimerEx

Aktivuje zadaný časovač s možností čekání a poskytne informace o kontextu časovače.

TryAcquireSRWLockExclusive

Pokusí se získat zámek čtečky/zapisovače (SRW) ve výhradním režimu. Pokud je volání úspěšné, volající vlákno převezme vlastnictví zámku.

TryAcquireSRWLockShared

Pokusí se získat zámek čtečky/zapisovače (SRW) ve sdíleném režimu. Pokud je volání úspěšné, volající vlákno převezme vlastnictví zámku.

Nové struktury

REASON_CONTEXT

Obsahuje kontextové informace pro časovač aktivovaný pomocí SetWaitableTimerEx.