当我使用 POSIX 的
sem_init()
函数编译程序时,在Mac OS X 10.10.1 (Yosemite)上使用GCC 4.9.1或来自XCode 6.1.1的Clang版本(Apple LLVM version 6.0 (clang-600.0.56) (based on LLVM 3.5svn)
)编译时,会得到一个编译警告(因为我通常使用-Werror
),提示该函数已经被弃用。快速查看/usr/include/sys/semaphore.h
可以发现,函数确实在声明后有一个__deprecated
标记,sem_getvalue()
和sem_destroy()
同样如此。
问题:
考虑到 POSIX 规范中没有任何关于废弃的提示,为什么这三个函数在 Mac OS X 上被单独标记为废弃?
既然它们已经被废弃,那么它们的替代方案是什么,为什么这个替代方案更受欢迎?
(我先检查了 Ask Different;没有标记为 c 的问题,也没有询问废弃的系统调用的问题 - 只有程序。)
sem_init()
函数得到ENOSYS错误的提示。 - Jonathan Leffler