进程间通讯《六》
来源:互联网 发布:java string存储中文 编辑:程序博客网 时间:2024/05/04 01:05
Posix 有名信号灯。
Posix有名信号灯 和 基于内存的信号灯一个很明显的区别是初始化不一样
Posix 有名信号灯的初始化如下:
与其对应的关闭信号灯API
当一个进程终止时,内核对其还打开着的有名信号灯自动执行这样的信号灯操作。不管是否正常终止,或异常退出。
关闭了信号灯, 但是并没有从系统中删除掉。
其他的操作诸如: sem_wait( ), sem_post( )等, 都如同Posix 基于内存的无名信号灯。
因为打开的信号灯是基于文件系统的,所以,Posix 有名信号灯天生具备多进程访问能力。不需要额外映射到共享内存区域。
另外,在fork( ) 之前,打开信号灯。例程如下:
这样的代码也是正确的。 Posix.1 这样描述: "在父进程中打开的任何信号灯,仍在子进程中打开"
Posix有名信号灯 和 基于内存的信号灯一个很明显的区别是初始化不一样
Posix 有名信号灯的初始化如下:
sem_t *sem_open(const char *name, int oflag);
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
返回: 成功返回新的sem, 失败返回SEM_FAILED, 并置响应errno;
sem_t *sem_open(const char *name, int oflag, mode_t mode, unsigned int value);
返回: 成功返回新的sem, 失败返回SEM_FAILED, 并置响应errno;
与其对应的关闭信号灯API
int sem_close(sem_t *sem);
返回: 成功返回0, 失败为-1;
返回: 成功返回0, 失败为-1;
当一个进程终止时,内核对其还打开着的有名信号灯自动执行这样的信号灯操作。不管是否正常终止,或异常退出。
关闭了信号灯, 但是并没有从系统中删除掉。
int sem_unlink(const char *name);
返回: 成功返回0, 失败 返回-1;
返回: 成功返回0, 失败 返回-1;
其他的操作诸如: sem_wait( ), sem_post( )等, 都如同Posix 基于内存的无名信号灯。
因为打开的信号灯是基于文件系统的,所以,Posix 有名信号灯天生具备多进程访问能力。不需要额外映射到共享内存区域。
另外,在fork( ) 之前,打开信号灯。例程如下:
mutex = sem_open(name, IPC_CREAT | IPC_EXCL, 0666, 1);
pid = fork( );
if (pid < 0) return -1;
if (pid == 0) {
sem_wait(mutex);
...
sem_post( mutex);
} else {
sem_wait(mutex);
...
sem_post(mutex);
}
pid = fork( );
if (pid < 0) return -1;
if (pid == 0) {
sem_wait(mutex);
...
sem_post( mutex);
} else {
sem_wait(mutex);
...
sem_post(mutex);
}
这样的代码也是正确的。 Posix.1 这样描述: "在父进程中打开的任何信号灯,仍在子进程中打开"
- 进程间通讯《六》
- 进程间通讯
- VB 进程间通讯
- 进程间通讯
- vc 进程间通讯
- 进程间通讯总结
- 进程间通讯《一》
- 进程间通讯《二》
- 进程间通讯《三》
- 进程间通讯《四》
- 进程间通讯《五》
- vc 进程间通讯
- Linux进程间通讯
- 进程间通讯方法
- 进程间通讯
- 进程间通讯
- 进程间通讯
- 进程间通讯
- The Entrepreneurs Dilemma - Sell now for $Millions or holdout for $Billions?
- 什么是Activity,Activity的其他概念, Activity分类
- Creed
- OPENSER的数据库管理系统serweb(一)
- HTML学习笔记(4)
- 进程间通讯《六》
- 经典语录
- INFORMIX-IDS基本知识
- windows socket详细解析
- 从硬盘装2000,XP的一点经验
- knowjava的真实身份
- 全银河系最好吃的水果---菠萝蜜
- 恒生电子据说要破产了
- AVR-GCC里定义的API