Pourquoi sem_init(), sem_getvalue(), sem_destroy() obsolète sur Mac OS X et ce qui les remplace?

Quand je compile un programme en utilisant la POSIX sem_init() fonction, je reçois un avertissement de compilation (erreur parce que j'ai l'habitude d'utiliser -Werror) que la fonction est obsolète quand je compile sur Mac OS X 10.10.1 (Yosemite) avec GCC 4.9.1 ou la version de Clang (Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)) à partir de XCode 6.1.1. Un rapide coup d'oeil à /usr/include/sys/semaphore.h montre que la fonction a en effet un __deprecated tag après sa déclaration, que faire
sem_getvalue() et
sem_destroy().

Questions:

  1. Étant donné qu'il n'existe pas de soupçon d'autodérision dans la spécification POSIX, pourquoi ces trois fonctions de la considérer comme obsolète sur Mac OS X?

  2. Étant donné qu'ils sont obsolètes, qu'est-ce que le remplacement, et pourquoi le remplacement préféré?

(Je n'ai vérifier Demandez À Différentes première; il n'y a pas de questions tagged c et pas de questions sur l'obsolète appels système — programmes seulement.)

  • Liées à la stackoverflow.com/questions/1413785/sem-init-on-os-x et stackoverflow.com/questions/16655153/...?
  • La première de ces deux semble couvrir mon problème dans la pratique, cependant il y a toujours le "pourquoi" (comme dans "pourquoi ne pas Mac OS X sans nom sémaphores?) qui est en suspens. Mais c'est sans doute le moins facilement répondu à la partie. Depuis que mon code n'était pas de la compilation, je n'étais pas en arriver au point d'un ENOSYS erreur de la sem_init() fonction.
  • Un autre et peut-être plus canonique de la source de la réponse peut être trouvée à l'aide de devforums.apple.com dans le "Noyau du système d'exploitation" sous-section de "Mac Développement".
  • la mise en œuvre de structures de contrôle dans la mémoire partagée entre les processus est une surcharge considérable aussi bien dans le développement que dans l'exécution. Ils ont probablement ne veux pas engager que pour une interface qui n'a pas beaucoup d'utilisation dans un monde de threads. Leur façon de faire avec ce qui est en fait très ennuyeux, en fournissant une interface qui vient vous renvoie une erreur. Ce qui montre bien, encore une fois, que le respect de la norme POSIX est juste sur la surface. Ils ne sont pas vraiment à coeur de fournir un environnement ouvert.