线程同步与进程间通信方式

一、线程同步

        1.全局变量

        2.信号量:是一种资源,可以被申请、释放、初始化。释放:让资源数+1,不会阻塞。申请:让资源数-1,如果当前资源数为0,申请资源时会阻塞等待,直到资源不为0,才能继续向下执行。

Linux内核:PV操作,P申请、V释放。

步骤:①sem_t sem        ②sem_init(&sem, 0, 1); 0为线程间共享,非0为进程间共享。最后一个参数为申请次数。        ③sem_wait(&sem);申请        ④sem_post(&sem);释放        ⑤sem_destroy(&sem);销毁

二、进程间通信的方式

        1.管道:

                ①无名管道

                        只能用于具有亲缘关系的进程间通信

                        步骤:1.int pipefd[2];        2.pipe(pipefd);

                        pipefd[0]为读        pipefd[1]为写

                        特点:1.如果有写端:①如果有数据,直接读取数据。②如果没有数据,阻塞等待直到读取到数据,再继续向下执行。

                        2.如果没有写端:①如果有数据,直接读取数据。 ②如果没有数据,不阻塞等待直接向下执行

                        3.如果有读端: ①如果管道中没有写满(64k),则直接写入。 ②如果管道中写满(64k),阻塞等待,直到有数据读出才能继续写入

                        4.如果没有读端:向管道中写入数据会产生管道破裂,导致进程异常退出。

                ②有名管道

                        1.创建管道:mkfifo(路径, 权限);

                        2.打开管道:open(路径, 方式);

                        3.读写数据

                        4.关闭管道

              必须读写两端同时加入,才能继续向下执行。   

        2.信号

                

        3.消息队列

        4.共享内存

        5.有名信号量

        6.本地域套接字

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学嵌入式的小白KK

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

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

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

打赏作者

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

抵扣说明:

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

余额充值