Linux POSIX IPC 有名信号量 无名信号量
Linux POSIX IPC 有名信号量 无名信号量
模型:
- 初始化并打开有名信号量:sem_open()
- 创建/获得无名信号量:sem_init()
- 操作信号量:sem_wait()/sem_trywait()/sem_timedwait()/sem_post()/sem_getvalue()
- 退出有名信号量:sem_close()
- 销毁有名信号量:sem_unlink()
- 销毁无名信号量:sem_destroy()
头文件
#include<semaphore.h> #include<sys/stat.h> #include<fcntl.h>
sem_open()
//创建/打开一个有名信号量,成功返回新信号量的地址,失败返回SEM_FAILED设errno // <semaphore.h> //#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()
相关推荐
starinshy 2020-11-10
archimedes 2020-11-05
hackerlpy 2020-09-25
神龙 2020-06-07
安得情怀似旧时 2020-04-20
farwang 2020-04-20
RayCongLiang 2019-12-29
wanggongzhen 2020-01-09
Attend 2010-09-04
goawalk 2011-03-24
insularisland 2019-11-05
shipinsky 2019-11-05
GeorgeTH 2019-10-29
Proudoffaith 2019-10-28
过儿古墓 2011-05-26
hehuistudent 2008-09-11
kuailexiaochuan 2015-04-11
qiaosym 2012-03-29
playlinuxxx 2016-07-30
pointfish 2011-08-23
zjhqlmzldx 2011-06-02