Mac OS Xでアトミックインクリメントおよびデクリメント演算子をグーグルで検索し、「OSAtomic.h」を見つけましたが、これはカーネル空間でのみ使用できるようです。
Jeremy Friesnerは、OS Xでアセンブリまたはミューテックスを使用するクロスプラットフォームのアトミックカウンターを指摘しました(ifdefのインターリーブを理解している限り)。
OS XのようなものはありませんInterlockedDecrement
か?atomic_dec()
Mac OS Xでアトミックインクリメントおよびデクリメント演算子をグーグルで検索し、「OSAtomic.h」を見つけましたが、これはカーネル空間でのみ使用できるようです。
Jeremy Friesnerは、OS Xでアセンブリまたはミューテックスを使用するクロスプラットフォームのアトミックカウンターを指摘しました(ifdefのインターリーブを理解している限り)。
OS XのようなものはありませんInterlockedDecrement
か?atomic_dec()
OSAtomicがカーネルスペースのみだと思う理由は何ですか?以下はコンパイルされ、正常に動作します。
#include <libkern/OSAtomic.h>
#include <stdio.h>
int main(int argc, char** argv) {
int32_t foo = 1;
OSAtomicDecrement32(&foo);
printf("%d\n", foo);
return 0;
}
現在、C++11を使用することをお勧めしますstd::atomic
。
CoreServicesを介してIncrementAtomic()およびDecrementAtomic()を使用することもできます。
#include <CoreServices/CoreServices.h>
int main(int argc, char** argv)
{
int val = 0;
IncrementAtomic(&val);
DecrementAtomic(&val);
return 0;
}
注:これらの関数の戻り値は、インクリメントされる前の整数の値であるため、Win32 InterlockedIncrement()およびInterlockedDecrement()関数と同様の動作が必要な場合は、戻り値に+1するラッパーを作成する必要があります。 。
テンプレートクラスについては、 Intelのスレッドビルディングブロックを確認することもできます。atomic