我是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