信号量用法
来源:互联网 发布:百叶帘品牌 知乎 编辑:程序博客网 时间:2024/06/16 17:44
信号量的使用主要有以下接口可供调用:
1 sem_init
#include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value);
sem_init函数用于初始化一个未命名的信号量;
sem_t *sem:指向一个信号量结构的指针;
int pshared:用于指示信号量是进程内线程共享还是进程间共享;
unsigned int value:用于初始化信号量的值;
sem_wait和semtrywait函数错误说明:返回值:若sem_init成功则初始化
sem_t *sem所指向的信号量结构内容,若失败返回-1,并设置errno的值;
用法:
#include <semaphore.h>
sem_t sem;
memset(&sem, 0, sizeof(struct sem_t));
sem_init(&sem, 0, 1);
2 sem_waitint sem_wait(sem_t *sem);
int sem_trywait(sem_t *sem);sem_wait函数用于锁住
sem_t *sem所指定的信号量,若信号量的值为0,则sem_wait函数不返回,直到获取这个信号量,或被中断返回。若信号量值大于0,则获取信号量返回。
sem_t *sem:指向需要获取的信号量结构指针;
返回值:
若sem_wait返回0表示函数调用成功,并且信号量被锁,若返回-1则表示函数调用失败,并且信号量状态不会发生改变;错误值设置到errno里;
功能:若信号量没有被锁,则锁住信号量,若信号量已经被锁则不改变信号量状态,返回-1;
参数:
sem_t *sem:指向需要获取的信号量结构指针;
返回值:
若sem_wait返回0表示函数调用成功,并且信号量被锁,若返回-1则表示函数调用失败,并且信号量状态不会发生改变;错误值设置到errno里;
用法:
#include <semaphore.h>
int iRet = -1;
sem_t sem;
memset(&sem, 0, sizeof(struct sem_t));
sem_init(&sem, 0, 1);
....
// 在一个进程中的线程中共享
iRet = sem_wait(&sem);// iRet = sem_trywait(&sem);if (0 == iRet){printf("lock successful\n");}else{printf("lock failed\n");}
- [EAGAIN]
- 信号量已经被锁,这个错误只被sem_trywait函数返回
- [EINVAL]
- 信号量指针非法,或指向的信号量已经被释放;
- [ENOSYS]
- The functions sem_wait() and sem_trywait() are not supported by this implementation.
[EDEADLK]
- 死锁;
- A deadlock condition was detected.
- [EINTR]
- 被中断信号中断;
int sem_post(sem_t *sem);
参数:功能:释放信号量;
sem_t *sem:
指向信号量的指针;返回值:0:释放信号量成功;-1:释放信号量失败,设置errno值errno:EINVAL:信号量为空;
用法:
#include <semaphore.h>
int iRet = -1;
sem_t sem;
memset(&sem, 0, sizeof(struct sem_t));
sem_init(&sem, 0, 1);
....
// 在一个进程中的线程中共享
iRet = sem_wait(&sem);// iRet = sem_trywait(&sem);if (0 == iRet){printf("lock successful\n");}else{printf("lock failed\n");}// do some useful thing。。
。。
sem_post(&sem);
。。。
- 信号量用法
- Linux信号量的用法
- vxworks 信号量的用法
- 信号量API用法
- 信号量dispatch_semaphore的用法
- GCD高级用法-信号量
- 信号量基本操作函数用法
- Linux系统下信号量的用法
- 线程同步-信号量-strand的用法总结
- sem_init,sem_post,sem_wait 信号量的用法解释
- sem_init,sem_post,sem_wait 信号量的用法解释
- 关键段、事件、互斥量、信号量用法总结
- sem_init,sem_post,sem_wait 信号量的用法解释
- 多线程学习01:Semaphore信号量的用法
- 基于内存的posix信号量用法
- 信号量的用法和解释,sem_init,sem_wait
- 信号量
- 信号量
- 3G中的A-GPS移动定位技术
- C# 中使用OPenCV(Emgu)心得
- cocoa中NSString转换成utf8的编码格式
- #银行智能助手Lola#银行工作人员可以下岗了,Siri之父SRI新作,银行智能助手Lola
- 短信拦截
- 信号量用法
- 短信数据结构
- Linux进入单用户模式
- C#.net 环境下使用OpenCV
- VC重绘如何防止控件闪烁
- Android 真机调试
- Linux平台上用C++实现多线程互斥锁
- C、C++缓冲区的刷新
- 一个有趣的盛水问题