6

Mac OS Xでアトミックインクリメントおよびデクリメント演算子をグーグルで検索し、「OSAtomic.h」を見つけましたが、これはカーネル空間でのみ使用できるようです。

Jeremy Friesnerは、OS Xでアセンブリまたはミューテックスを使用するクロスプラットフォームのアトミックカウンターを指摘しました(ifdefのインターリーブを理解している限り)。

OS XのようなものはありませんInterlockedDecrementか?atomic_dec()

4

4 に答える 4

9

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;
}
于 2010-01-23T20:52:35.773 に答える
2

現在、C++11を使用することをお勧めしますstd::atomic

于 2018-07-14T15:03:41.453 に答える
0

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するラッパーを作成する必要があります。 。

于 2010-09-30T19:13:43.887 に答える
0

テンプレートクラスについては、 Intelのスレッドビルディングブロックを確認することもできます。atomic

于 2010-01-23T20:54:01.513 に答える