(1)什么是线程通信,为何需要多线程通信?
(2)linux中一个进程中的多个线程间是如何通信的?
(3)多线程间的通信方式以及通信原理?
原理:
线程之间无需特别的通信方式,因为它们之间是数据共享(即将数据复制到共享的全局变量或共享的堆中)的,两个线程可以同时使用一个全局变量,但需要注意线程间的同步;
为何需要线程通信:
多个线程并发执行时, 在默认情况下CPU是随机切换线程的,当我们需要多个线程来共同完成一件任务,
并且我们希望他们有规律的执行, 那么多线程之间需要一些协调通信,以此来帮我们达到多线程共同操作一份数据。
当然如果我们没有使用线程通信来使用多线程共同操作同一份数据的话,虽然可以实现,
但是在很大程度会造成多线程之间对同一共享变量的争夺,那样的话势必为造成很多错误和损失!
所以,我们才引出了线程之间的通信,多线程之间的通信能够避免对同一共享变量的争夺。
概念:
多个线程在处理同一个资源,并且任务不同时,需要线程通信来帮助解决线程之间对同一个变量的使用或操作。
通信方式:
- 信号
- 互斥锁
- 条件变量
- 信号量
- 信号量与线程锁、条件变量
参考博文: