进程间通信_unp_v2

学习笔记:from2019/08/15.

第4章 管道和FIFO

4.1 概述

管道是最初的UNIX IPC形式,可追溯到1973年的UNIX第三版。
FIFO有时称为有名管道(named pipe).
管道和FIFO都是使用readwrite函数访问的。

4.3 管道

所有Unix都提供管道,它由pipe函数创建,提供一个单路(单向)数据流。

#include <unistd.h>
int pipe(int fd[2]);
                    //OK return 0;  Error return -1

第10章 POSIX信号量

10.1 概述

信号量(semaphore)是一种用于提供不同进程间或一个给定进程的不同线程间同步手段的原语。
一个进程可以在某个信号量上执行的三种操作:
(1)创建(create)一个信号量。
(2)等待(wait)一个信号量。该操作会测试这个信号量的值,如果其值小于或等于0,那就等待,阻塞,一旦其值变为大于0就将它减1.伪代码如下:

while(semahore_value <= 0)
    ;   //wait;i,e.,block the thread or process.
semaphore_value--;
//we have the semaphore

也称P操作,荷兰语proberen(尝试),也称递减或上锁。

(3)挂出(post)一个信号。该操作将使信号量的值加1.
最初称为V操作,代表荷兰语verhogen(增加),也称为递增、解锁、发信号。

计数信号量,初始化为某个值**N**,指示可用的资源数,譬如说缓冲区。

二值信号量可用于互斥目的,就像互斥锁一样:

/* 初始化互斥锁                       │       初始化信号量为1; */
pthread_mutex_lock(&mutex);sem_wait(&sem);
/* 临界区                            │       临界区 */
pthread_mutex_unlock(&mutex);sem_post(&sem);

生产者消费者伪代码:
get初始化为0;//数据数
put初始化为1;//空白数

//生产者
for (;;){
    sem_wat(&put);
    //把数据放入缓冲区
    sem_post(&get);
}
//消费者
for (;;){
    sem_wait(&get);
    //处理缓冲区中的数据
    sem_post(&put);
}

POSIX提供两类信号:有名信号量(named)和基于内存的信号量(memory-based).后者也称为无名信号量(unnamed).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luuyiran

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值