您的位置 首页 新品

Linux IPC POSIX 信号量

Linux IPC POSIX 信号量-//获得信号量sem的当前的值,放到sval中。如果有线程正在block这个信号量,sval可能返回两个值,0或“-正在block的线程的数目”,Linux返回0//成功返回0,失败返回-1设errno//Link with -pthread.int sem_getvalue(sem_t *sem, int *sval);

模型

#include#include#includesem_open() //初始化并翻开有名信号量sem_init() //创立/取得无名信号量sem_wait()/sem_trywait()/sem_timedwait()/sem_post()/sem_getvalue() //操作信号量sem_close() //退出有名信号量sem_unlink() //毁掉有名信号量sem_destroy() //毁掉无名信号量

sem_open()

//创立/翻开一个有名信号量,成功回来新信号量的地址,失利回来SEM_FAILED设errno// //#define SEM_FAILED ((sem_t *) 0//#define SEM_VALUE_MAX (2147483647)//Link with -pthread.sem_t *sem_open(const char *name, int oflag);sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);

oflag

O_CREAT假如信号量不存在就创立信号量,信号量的UID被设为调用进程的effecTIve UID,GID被设为调用程序的GID,能够在mode指定权限O_EXCL和O_CREAT连用,保证能够创立新的信号量,假如已存在就报错value :合作O_CREAT运用,设置信号量的初始值

sem_init()

//初始化无名信号量,成功回来0,失利回来-1设errno//Link with -pthread.int sem_init(sem_t *sem, int pshared, unsigned int value);

sem 创立无名信号量的指针
pthread指定信号量是在线程间运用仍是进程间运用

0表明信号量在一个进程内的线程间运用,此刻信号量应该分配的在线程可见的内存区域(eg,大局区,BSS段,堆区)

非0表明信号量在进程间运用,此刻信号量应该分配在同享内存里,If pshared !=0,

sem_wait()/sem_trywait()/sem_TImedwait()

//Link with -pthread.//成功回来下降后的信号量的值,失利回来-1设errno//企图占用信号量,假如信号量值>0,就-1,假如现已=0,就block,直到>0int sem_wait(sem_t *sem);//企图占用信号量,假如信号量现已=0,当即报错int sem_trywait(sem_t *sem);//企图占用信号量//假如信号量=0,就block abs_timeout那么久,从 Epoch, 1970-01-01 00:00:00 +0000 (UTC).开端按纳秒计//假如时刻到了信号量还没>0,报错int sem_TImedwait(sem_t *sem, const struct TImespec *abs_timeout);

struct timespec { time_t tv_sec; /* Seconds */ long tv_nsec; /* Nanoseconds [0 .. 999999999] */};

sem_post()

//偿还信号量,成功回来0,失利回来-1设errno//Link with -pthread.int sem_post(sem_t *sem);

sem_getvalue()

//取得信号量sem的当时的值,放到sval中。假如有线程正在block这个信号量,sval或许回来两个值,0或“-正在block的线程的数目”,Linux回来0//成功回来0,失利回来-1设errno//Link with -pthread.int sem_getvalue(sem_t *sem, int *sval);

sem_close()

//封闭有名信号量,成功回来0,失利回来-1设errno//Link with -pthread.int sem_close(sem_t *sem);

sem_unlink()

//企图毁掉信号量,一旦一切占用该信号量的进程都封闭了该信号量,那么就会毁掉这个信号量//成功回来0,失利回来-1设errno//Link with -pthread.int sem_unlink(const char *name);

sem_destroy()

//毁掉信号量,成功回来0,失利回来-1设errno//Link with -pthread.int sem_destroy(sem_t *sem);

 

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/99783.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部