【无标题】

信号量(资源的个数)

信号量的机制:

1.信号量 ——来描述可使用资源的个数

2.P操作

    表示使用这个资源, 资源个数减一

     P操作逻辑:尝试获取资源,有资源可用时直接使用,资源个数减一,

                          没有资源可用时,等待。

3.V操作

     表示产生这个资源,资源个数加一

     V操作逻辑:释放一个资源,然后检查是否有等待该信号量的进程。如果有等待进程,那么从                             等待队列中唤醒一个或多个进程,具体唤醒的数量取决于信号量的设置和等待队                             列的情况。

 信号量的分类:
1、信号无名量 ——>线程间通信
2、有名信号量——>进程间通信
框架:
1.信号量的定义:sem_t sem //造了一类资源

2.信号量的初始化:sem_init
3.信号量的PV操作(核心):sem_wait()/ sem_post()
4.信号量的销毁:sem_destroy
semaphore
信号量的定义 :
sem t   信号量的类型
sem     信号量的变量                               

例如:sem_t  sem_1;

通信的方式:
      同一主机
1、古老的通信方式
管道: 无名管道——(1)

         有名管道——(2)
         信号       ——(3)
2、IPC对象通信 system v     BSD   suse fedora    kernel.org
          消息队列——(4)
          共享内存(*)——(5)//最高效
          信号量集()——(6)
3、socket通信
          网络通信——(7)

管道:
    无名管道
          int pipe(int pipefd[2]);

    功能:
            创建一个管道参数:
             pipefd :用来获取 管道的两端 (读端pipefd[0] / 写端pipefd[1])
            返回值:
                        成功 0
                        失败 -1 && errno

   管道的特点:

       1.管道大小:65536字节,即64k

       2.管道操作特点:

             读走数据之后,认为数据没了;

             1.读端存在,写管道
                    管道空:可以写数据

                    管道满:会造成-->写阻塞
             2.读端不存在,写管道

                    系统会给进程发一个信号SIGPIPE(管道破裂)
             3.写端存在,读管道

                     管道空,读不到数据这时会造成读操作阻塞
             4.写端不存在,读管道

                     如果管道中有数据,则读取这些数据!
                     如果没有数据,读操作不阻塞,立即返回!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值