LINUX多线程

2023-12-18 18:37:04

线程之间互不影响。
每一个进程有一个main函数,进程与进程之间需要通信方式。
但是效率低下。
多线程是只有一个main函数:
在这里插入图片描述
调度是以线程为单位的。
资源的分配是以进程来分配的。

如何创建线程?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行: -lpthread 链接某些库
在这里插入图片描述
目的:创建额外的线程,用来接收数据,数据是主线程给的,主线程的数据来自标准输入stdin,
在这里插入图片描述
得到数据之后,告诉另外的线程:平时不要休眠了,来接收通知。
在这里插入图片描述
但是这个函数一直在消耗的CPU的资源,一直判断等待通知。(top命令查看)
在这里插入图片描述

信号量

所以不能这样操作,等让线程休眠。 ---- 使用信号量!
主程序得到数据后,通过信号量来唤醒这个线程。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
性能得到改进。
但是还有缺点:
接收线程在打印的时候,主线程一直是在运行的,所以会出现打印一半的时候,前半截是老数据,后半截是新数据。

互斥量

----增加互斥量,另外的线程在访问buf打印的时候,主线程就不能访问buf了(即就不要输入了)。
在这里插入图片描述
也就是说想访问buf先锁一下:
在这里插入图片描述
在这里插入图片描述

同步互斥

这样的话我就有时间在另外线程中,获得互斥量去处理打印Buf了。
另外一种互斥的方法---------同步互斥(条件变量)
在这里插入图片描述
首先获得互斥量;
等待要件成立,如果发现条件没成立,就释放互斥量,就继续等待。
在这里插入图片描述
在这里插入图片描述

文章来源:https://blog.csdn.net/qqmrchen124/article/details/135068290
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。