线程之间互不影响。
每一个进程有一个main函数,进程与进程之间需要通信方式。
但是效率低下。
多线程是只有一个main函数:
调度是以线程为单位的。
资源的分配是以进程来分配的。
运行: -lpthread 链接某些库
目的:创建额外的线程,用来接收数据,数据是主线程给的,主线程的数据来自标准输入stdin,
得到数据之后,告诉另外的线程:平时不要休眠了,来接收通知。
但是这个函数一直在消耗的CPU的资源,一直判断等待通知。(top命令查看)
所以不能这样操作,等让线程休眠。 ---- 使用信号量!
主程序得到数据后,通过信号量来唤醒这个线程。
性能得到改进。
但是还有缺点:
接收线程在打印的时候,主线程一直是在运行的,所以会出现打印一半的时候,前半截是老数据,后半截是新数据。
----增加互斥量,另外的线程在访问buf打印的时候,主线程就不能访问buf了(即就不要输入了)。
也就是说想访问buf先锁一下:
这样的话我就有时间在另外线程中,获得互斥量去处理打印Buf了。
另外一种互斥的方法---------同步互斥(条件变量)
首先获得互斥量;
等待要件成立,如果发现条件没成立,就释放互斥量,就继续等待。