posix信号量简介
来源:互联网 发布:淘宝怎么修改价格 编辑:程序博客网 时间:2024/06/05 08:23
sem_open(3)
initialize and open a named semaphore
sem_init(3)
initialize an unnamed semaphore
sem_wait(3)
P 操作
sem_post(3)
V 操作
sem_close(3)
close a named semaphore
sem_destroy(3)
destory an unnamed semaphore
sem_unlink(3)
remove a named semaphore
无名信号量可以用在共享内存的情况下,比如实现进程中各个线程之间的互斥和同步。命名信号量通常用于不共享内存的情况下,比如不共享内存的进程之间。
1、有名信号量的创建
1)创建并初始化
sem_t *sem_open(const char *name, int oflag); //打开已存在
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value); //创建
name用于标识信号量的名字
oflag被设置为O_CREAT用来创建一个信号量(如果和0_EXCL一起,当这个信号量已经存在时候这个调用将会失败)
mode控制新的信号量的访问权限
value指定信号量的初始化值
2)int sem_wait(sem_t *sem);
锁住信号量,如果这个信号量的计数大于0,锁住这个信号量之后,信号量计数减一。如果这个信号量的计数是0,这个调用被阻塞。
解锁一个信号量的语义是:
3)int sem_post(sem_t *sem);
对信号量增1然后返回。
4)销毁信号量
在退出或是退出处理函数中调用sem_unlink()去删除系统中的信号量。在sem_unlink之前,要确保所有对这个有名信号量的引用都已经通过sem_close()关闭,否则,sem_unlink()函数不会起到任何的作用。
5)有名信号灯支持进程间通信。
2、无名信号量的创建
一个无名信号量被放置在一个被多个线程(多线程共享信号量)或是进程(多进程共享信号量)共享的内存区域。一个线程共享信号量被放置在一个只有同一个进程的线程共享它们的区域,例如一个全局的变量。一个进程共享的信号量被放置在一个不同进程可以共享它们的区域,例如一个共享内存区。一个无名信号量为线程间和相关的进程间提供同步机制。
1)无名信号量不需要使用sem_open调用,下面的两行代码替换了它的行为:
{
sem_t semid;
int sem_init(sem_t *sem, int pshared, unsigned value);
}
3、信号量是包含一个非负整型变量
- posix信号量简介
- Posix信号量
- POSIX信号量
- Posix信号量
- Posix信号量
- Posix信号量
- posix 信号量
- Posix信号量
- POSIX信号量
- POSIX信号量
- POSIX信号量
- POSIX 信号量
- posix信号量
- 哲学家问题 POSIX 信号量
- 同步(二)Posix信号量
- Posix信号量实例
- POSIX信号量与互斥锁
- Posix信号量基本知识
- emacs+autocomplete+semantic实现自动补全
- android 中UID与PID的作用与区别
- Java4种访问权限
- 比较两个TXT文本的不同写入3.txt
- Spring Security 详细配置
- posix信号量简介
- 判断客户浏览器是否支持cookie
- matlab GUI界面编程总结
- 实现两个mysql数据库同步
- asp.net mvc 强类型HTML辅助方法
- linux下C语言使用线程池(附带编码)
- Eclipse中的快捷键
- 主流浏览器下 定义小于18px高度属性height的盒子再次测试 使用overflow解决问题
- Spring 发送带有内嵌图片和附件的邮件的java程序