我是MAC/OSX的新蜜蜂。我正在研究Titanium跨平台运行时,它为大多数可移植的C++ API使用POCO库。我发现POCO在OSX上为其NamedMutex实现使用POSIX信号量,而不是SysV信号量,它在其他* NIX中使用。为什么POCO选择使用OSX的Posix信号量?
bool NamedMutexImpl::tryLockImpl()
{
#if defined(sun) || defined(__APPLE__) || defined(__osf__) || defined(__QNX__) || defined(_AIX)
return sem_trywait(_sem) == 0;
#else
struct sembuf op;
op.sem_num = 0;
op.sem_op = -1;
op.sem_flg = SEM_UNDO | IPC_NOWAIT;
return semop(_semid, &op, 1) == 0;
#endif
}
对于一些搜索,我看到的SysV为sem_ * API的支持OSX,以及:http://www.osxfaq.com/man/2/semop.ws。任何想法,为什么POCO开发人员选择在OSX上使用POSIX API?
我特别在上面的调用中使用了SEM_UNDO功能,这是POSIX信号量不能给出的。
我想冒险猜测,因为OSX植根于BSD,它在SysV发生之前从UNIX树分支出来,因此对于OSX POSIX可能比SysV更接近本机。 – m1tk4 2010-08-13 19:07:27