文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>信号量

信号量

时间:2010-10-22  来源:chenxibing008


定义一个信号量: struct semaphore xx_sem;
初始化信号量: void sema_init(struct semaphore *sem, int val); 把信号量sem初始化为val。如果把信号量初始化为大于1的数,则变成一个计数信号量,不过一般不要这样做。
初始化互斥信号量: void init_MUTEX(struct semaphore *sem); 初始化sem为1,等同于: sema_init(struct semaphore *sem, 1);
void init_MUTEX_LOCKED(struct semaphore *sem); 将信号量sem初始化为0;等同于 sema_init(struct semaphore *sem, 0);
简便初始化方式: DECLARE_MUTEX(xx_sem)         //初始化为1 DECLARE_MUTEX_LOCKED(xx_sem)  //初始化为0
说明:将信号量初始化为0,可以用于同步。

获取信号量: void down(struct semaphore *sem); 获取信号量sem;会导致睡眠,不能在中断上下文使用。
void down_interruptible(struct semaphore *sem); 由于down()而进入睡眠的进程不能被信号打断;而因为down_interruptible()进入睡眠的进程可以被信号打断。
int down_trylock(struct semaphore *sem); 尝试获得信号量sem,如果获取成功,立即返回0;否则返回飞0值。不会导致调用者睡眠,可以在中断上下文使用。
释放信号量: void up(struct semaphore *sem);

一般用法:
DECLARE_MUTEX(xx_sem); //定义并初始化信号量 down(&xx_sem);         //获取信号量 。。。。。。             //临界区 up(&xx_sem);           //释放信号量





相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载