设为首页 加入收藏

TOP

Linux下多任务间通信和同步-POSIX信号量
2014-11-24 02:29:29 来源: 作者: 【 】 浏览:1
Tags:Linux 任务 信和 同步 -POSIX 信号

POSIX信号量是另一种信号量的实现.它的定义和功能有System V信号量基本一样,不同的是这组信号量函数的名字已“sem_”开头.基本的系统该调用有四个:sem_init(),sem_wait(),sem_post()和sem_destory().


系统调用sem_init()


该系统该调用的作用是对由sem指定的信号量进行初始化.其原型:


#include
int sem_init(sem_t *sem, int pshared , unsigned value);


参数sem:指向一个用于同步的信号量结构,该结构通常为一个长整形的数;


参数pshared:表示信号量的类型,由于目前linux值支持进程内的信号量,该值只能取0;


参数value:表示信号量的初始化值.


系统调用sem_wait()


该函数阻塞当前线程直到信号量sem的值大于0,也就是说,如果对一个值为2的信号量调用sem_wait()线程将会继续执行,但信号量的值将减到1.其原型:


#include
int sem_wati(sem_t *sem);


如果对一个值为0的信号量调用sem_wait(),这个函数就会等待直到有其他线程增加了这个值使它不再是0为止.如果有两个线程都在sem_wait()中等待同一个信号量变成非0值,那么当它被第三个线程增加一个“1”时,等待线程中只有一个能够对信号量做减法并继续执行,另外一个还将处于等待状态.若调用成功则返回0,否则返回-1.参数sem指向一个用于同步的信号量结构.


系统调用sem_post()


该函数用来增加信号量的值,其原型为:


#include
int sem_post(sem_t *sem);


当有线程阻塞在这个信号量上时,调用这个函数会使其中的一个线程不再阻塞.具体说来,sem_post()函数的作用是给信号量的加一个“1”,它是一个原子操作,即同时对同一个信号量做加“1”操作的两个线程是不会冲突的,信号量的值会正确地加上一个“2”.若调用成功则返回0,否则返回-1.参数sem指向一个用于同步的信号量结构.


系统调用sem_destory()函数


该函数用来释放信号量sem.其原型:


#include
int sem_destory(sem_t *sem);


若调用成功则返回0,否则返回-1.参数sem指向一个用于同步的信号量结构.


相关阅读


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下多任务间通信和同步-互斥锁 下一篇C语言快速取以2为底的对数的方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: