-
苹果 POSIX 信号量 - [苹果 UNIX 编程技术]
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://51test2003.blogbus.com/logs/7952923.html
苹果Mac OS X10.4只部分实现了 POSIX 有名信号量,未实现 POSIX 无名信号量。这点与Linux
相反,移植时请注意。
POSIX 有名信号量可用函数包括打开/关闭,PV操作。
值得注意的是:苹果未实现sem_getvalue()函数!!
解决之道——自己从mach封装semaphore。
#include <mach/semaphore.h>
#include <mach/task.h>
#include <mach/mach.h>
typedef struct sem_t {
semaphore_t msem;
int value;
} sem_t;
int sem_init(sem_t *sem, int pshared, int initialValue)
{
int result;
result = semaphore_create(mach_task_self(), &(sem->msem), SYNC_POLICY_FIFO, initialValue);
sem->value = initialValue;
return result;
}
int sem_destroy(sem_t *sem)
{
int result;
result = semaphore_destroy(mach_task_self(), sem->msem);
sem->value = -1;
return result;
}
int sem_wait(sem_t *sem)
{
int result;
result = semaphore_wait(sem->msem);
if(result == 0)
--(sem->value);
return result;
}
int sem_trywait(sem_t *sem)
{
int result;
mach_timespec_t wait_time = {0, 0};
result = semaphore_timedwait(sem->msem, wait_time);
if(result == 0)
--(sem->value);
return result;
}
int sem_post(sem_t *sem)
{
int result;
result = semaphore_signal(sem->msem);
if(result == 0)
++(sem->value);
return result;
}
int sem_getvalue (sem_t *sem, int *sval)
{
if(sem == NULL)
return -1;
return *sval = sem->value;
}
历史上的今天:
麦克孤独本地化组织现在报名 2007-08-27Cocoa 教程 第一讲 Objective C 语法(一) 2007-08-27Cocoa 教程 篇外语 Objective C 与 C 、C++ 的关系及调用实现 2007-08-27随机文章:
Xcode 单元测试介绍 (C/C++ 篇) 2008-12-24Xcode 单元测试介绍 (Objective C 篇) 2008-12-24苹果 Xcode 2.4.1 简体中文版发布 2007-08-25iNeddy 项目 Google Code 开通 (开发项目) 2008-12-30超链接样式的按钮 (NSButton 扩展<光标与富文本>) 2008-12-27
收藏到:Del.icio.us