互斥锁以及进程间通信

写线程 ---写资源

可以写数据 的条件

1.开始时 ,buf空的

2.读线程 读完了

读线程

//buf充当读资源

//1.一开始,buf中没有数据可读的

1.写线程结束

信号量的机制

1.信号量 

----来描述  可使用的资源的个数

2.p操作

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

    p操作逻辑  

    尝试获取资源

    有资源可用,直接使用,资源个数减一

    没有资源可用,此时等待

3.v操作

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


Value:需要初始化多少个这样的资源

Pshared:用来指定这个信号量是用在进程还是线程中的(0 :线程      不为0:进程)

用多线程程序设计一个火车票售票系统,

     要求:

         1.至少有两个售票窗口,每个售票窗口

         //2.不能重复买票,将100张车票均匀的从两个窗口卖出即可。    //锁

     

         int couter=100:

         //同步的效果:---信号量

           ./a.out

         窗口1 卖出车票        1

         窗口2 卖出车票        2

         窗口1 卖出车票        3

         窗口2 卖出车票        4

利用信号量的特点,使线程的执行之间有序

死锁现象:

总结:

   共享进程资源方便

   线程  抢占公共资源   带来的问题


互斥访问

  需要互斥锁   来保障  原子性操作

  使  操作完整

  互斥锁:

A.初始化  锁

B.加锁    //使用资源之后

C.解锁    //用完之后

D.销毁  锁

有顺序的进行方向

    信号量机制

      资源的种类 资源的数量 如何抽象?

      站在使用者的角度考虑 

  核心操作:

P    ---操作申请资源

V  ---操作释放资源

进程间的通信

      进程创建好之后,父子进程的空间    相互独立

通信的方式

//同一主机

1、古老的通信方式

管道:  //可以发好多话

   无名管道          (1)

   有名管道          (2) 

信号     // 一次只能发一个          (3)

2、IPC对象通信 system v    BSD      suse   fedora     kernel.org

消息队列(用的相对少,这里不讨论)          (4)

共享内存(*)      //最高效           (5)

信号量集()       //信号量           (6)

//不同主机

3、socket通信

网络通信          (7)


无名管道:

单向通道,用于进程间通信

数组管道的两端就是读写,数组的0号指针是读端,数组的1号指针是写端

int pipe(int pipefd[2]);

功能:

     创建一个管道

参数:

     pipefd     //用来获取 管道的两端      //读端pipefd[0]

                                                             //写端pipefd[1]

返回值:

   成功:  0

   失败: -1 && errno   

管道的特点:

   1.管道大小   65536字节   64K

   2.管道操作特点

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

     //写端存在,读端存在

     管道如果为空,此时可以一直写,直到写满

     //写端存在,读端不存在

     此时可以写,但是写操作会使管道破裂,

     会受到一个SIGPIPE的信号,该信号会使程序结束

     //写端存在,读管道

     可以读管道,但是管道中如果没有数据了,此时  读操作   阻塞

     //写端不存在,读管道

     可以读管道,但是管道中如果没有数据了,此时  读操作   不阻塞

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值