Атомный прирост на Mac OS X - PullRequest
6 голосов
/ 23 января 2010

Я поискал атомарные операторы увеличения и уменьшения в Mac OS X и нашел «OSAtomic.h», но, похоже, вы можете использовать это только в пространстве ядра.

Джереми Фризнер указал мне на кроссплатформенный атомный счетчик , в котором они используют ассемблер или мьютекс на OS X (насколько я понял, чередование ifdefs).

Нет ли что-нибудь вроде InterlockedDecrement или atomic_dec() в OS X?

Ответы [ 4 ]

7 голосов
/ 23 января 2010

Что заставляет вас думать, что 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;
}
1 голос
/ 14 июля 2018

В настоящее время рекомендуется использовать C ++ 11 std::atomic.

0 голосов
/ 30 сентября 2010

Вы также можете использовать IncrementAtomic () и DecrementAtomic () через CoreServices:

#include <CoreServices/CoreServices.h>

int main(int argc, char** argv) 
{
  int val = 0;
  IncrementAtomic(&val);
  DecrementAtomic(&val);    

  return 0;
}

Примечание: возвращаемым значением этих функций является значение целого числа перед , которое увеличивается, поэтому если вы хотите, чтобы поведение, аналогичное функциям Win32 InterlockedIncrement () и InterlockedDecrement (), вам необходимо создать оболочки, которые +1 к возвращаемому значению.

0 голосов
/ 23 января 2010

Вы также можете проверить резьбовые строительные блоки Intel для их atomic класса шаблонов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...