同期の新機能

Windows には、同期用の次の新しいプログラミング要素が含まれています。

Windows 8

新しい関数

DeleteSynchronizationBarrier

同期バリアを削除します。

EnterSynchronizationBarrier

呼び出し元のスレッドが同期バリアで待機し、スレッドの最大数がバリアに入るまで待機します。

GetOverlappedResultEx

指定したタイムアウト間隔内で、指定したファイル、名前付きパイプ、または通信デバイスに対して重複した操作の結果を取得します。 呼び出し元のスレッドは、警告可能な待機を実行できます。

InitializeSynchronizationBarrier

新しい同期バリアのスレッドとスピン数の最大数を指定します。

WaitOnAddress

指定したアドレスの値が変更されるまで待機します。

WakeByAddressAll

アドレスの値の変更を待機しているすべてのスレッドをスリープ解除します。

WakeByAddressSingle

アドレスの値の変更を待機している 1 つのスレッドをスリープ解除します。

新しいインターロック関数

InterlockedAddNoFence

指定した LONG 値に対してアトミック加算操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedAddNoFence64

指定した LONGLONG 値に対してアトミック加算操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedAndNoFence

指定した LONG 値に対してアトミック AND 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedAnd8NoFence

指定した char 値に対してアトミック AND 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedAnd16NoFence

指定した SHORT 値に対してアトミック AND 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedAnd64NoFence

指定した LONGLONG 値に対してアトミック AND 操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedBitTestAndComplement64

指定した LONG64 値の指定したビットをテストし、それを補完します。 この操作はアトミックです。

InterlockedBitTestAndResetAcquire

指定した LONG 値の指定したビットをテストし、0 に設定します。 操作はアトミックであり、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedBitTestAndResetRelease

指定した LONG 値の指定したビットをテストし、0 に設定します。 操作はアトミックであり、メモリ 解放セマンティクスを使用して実行されます。

InterlockedBitTestAndSetAcquire

指定した LONG 値の指定したビットをテストし、1 に設定します。 操作はアトミックであり、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedBitTestAndSetRelease

指定した LONG 値の指定したビットをテストし、1 に設定します。 操作はアトミックであり、解放メモリ順序セマンティクスを使用して実行されます。

InterlockedCompareExchangeNoFence

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 32 ビット値を比較し、比較の結果に基づいて別の 32 ビット値と交換します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedCompareExchange16

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 16 ビット値を比較し、比較の結果に基づいて別の 16 ビット値と交換します。

InterlockedCompareExchange16Acquire

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 16 ビット値を比較し、比較の結果に基づいて別の 16 ビット値と交換します。 操作は、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedCompareExchange16Release

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 16 ビット値を比較し、比較の結果に基づいて別の 16 ビット値と交換します。 交換は、解放メモリ順序セマンティクスを使用して実行されます。

InterlockedCompareExchange16NoFence

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 16 ビット値を比較し、比較の結果に基づいて別の 16 ビット値と交換します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedCompareExchangeNoFence64

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 64 ビット値を比較し、比較の結果に基づいて別の 64 ビット値と交換します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedCompareExchange128

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つの 128 ビット値を比較し、比較の結果に基づいて別の 128 ビット値と交換します。

InterlockedCompareExchangePointerNoFence

指定した値に対してアトミックな比較および交換操作を実行します。 関数は、指定された 2 つのポインター値を比較し、比較の結果に基づいて別のポインター値と交換します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedDecrementNoFence

指定した 32 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedDecrement16

指定した 16 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。

InterlockedDecrement16Acquire

指定した 16 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。 操作は、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedDecrement16Release

指定した 16 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。 操作は、解放メモリ順序セマンティクスを使用して実行されます。

InterlockedDecrement16NoFence

指定した 16 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedDecrementNoFence64

指定した 64 ビット変数の値をアトミック操作としてデクリメント (1 ずつ減少) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchangeNoFence

64 ビット変数をアトミック操作として指定された値に設定します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchange8

8 ビット変数をアトミック操作として指定された値に設定します。

InterlockedExchange16Acquire

16 ビット変数をアトミック操作として指定された値に設定します。 操作は、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedExchange16NoFence

16 ビット変数をアトミック操作として指定された値に設定します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchangeNoFence64

64 ビット変数をアトミック操作として指定された値に設定します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchangePointerNoFence

アドレスのペアをアトミックに交換します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchangeAddNoFence

2 つの 32 ビット値のアトミック加算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedExchangeAddNoFence64

2 つの 64 ビット値のアトミック加算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedIncrementNoFence

指定した 32 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedIncrement16

指定した 16 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。

InterlockedIncrement16Acquire

指定した 16 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。 操作は、メモリの取得順序セマンティクスを使用して実行されます。

InterlockedIncrement16Release

指定した 16 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。 この操作は、リリース メモリの順序付けセマンティクスを使用して実行されます。

InterlockedIncrement16NoFence

指定した 16 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedIncrementNoFence64

指定した 64 ビット変数の値をアトミック操作としてインクリメント (1 ずつ増加) します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedOrNoFence

指定した LONG 値に対してアトミック OR 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedOr8NoFence

指定した char 値に対してアトミック OR 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedOr16NoFence

指定した SHORT 値に対してアトミック OR 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedOr64NoFence

指定した LONGLONG 値に対してアトミック OR 演算を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedPushListSListEx

1 つのリンクされたリストを、1 つのリンクされた別のリストの先頭に挿入します。 リストへのアクセスは、マルチプロセッサ システムで同期されます。 このバージョンの メソッドでは、 __fastcall 呼び出し規則は使用されません。

InterlockedXorNoFence

指定した LONG 値に対してアトミック XOR 操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedXor8NoFence

指定した char 値に対してアトミック XOR 操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedXor16NoFence

指定した SHORT 値に対してアトミック XOR 操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

InterlockedXor64NoFence

指定した LONGLONG 値に対してアトミック XOR 操作を実行します。 操作はアトミックに実行されますが、メモリ バリアは使用されません。

Windows 7

新しい関数

SetWaitableTimerEx

指定された待機可能タイマーをアクティブ化し、タイマーのコンテキスト情報を提供します。

TryAcquireSRWLockExclusive

排他モードでスリム リーダー/ライター (SRW) ロックの取得を試みます。 呼び出しが成功すると、呼び出し元のスレッドはロックの所有権を取得します。

TryAcquireSRWLockShared

共有モードでスリム リーダー/ライター (SRW) ロックの取得を試みます。 呼び出しが成功すると、呼び出し元のスレッドはロックの所有権を取得します。

新しい構造体

REASON_CONTEXT

SetWaitableTimerEx でアクティブ化されたタイマーのコンテキスト情報が含まれます。