一起talk C栗子吧(第一百一十一回:C语言实例--线程间通信)


各位看官们,大家好,上一回中咱们说的是线程标识符的例子,这一回咱们说的例子是:线程间通信。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,我们在前面章回中说过进程间通信,那么线程之间有没有通信呢?严格来说没有线程间的通信。从通信的角度来看,通信主要是发送/接收信号或者传递数据,线程与进程在这些方面是不同的,其实这是由它们的特点决定的。进程拥有自己的资源,这些资源是私有的,不能随便和其它进程共享使用,所以需要进程间的通信;而线程(这里指同一个进行创建的线程)没有自己的资源,因为线程是由同一个进程创建的,所以这些线程之间可以使用任何进程的资源,也就是说它们可以共享进程的资源,既然资源可以共享了,那么就没有必要进行通信。

接下来我们举一个实际的例子时行说明,在代码中我们定义一个全局变量data。把它当作进程和线程的共享资源,在不同的进程与线程内都修改并且显示它的值。

  • data的初始值是1.
  • 再父进程中将其修改为2;在子进程中将其修改为3;
  • 等待子进程运行完成后,在父进程中分别创建两个线程;
  • 第一个线程中把data的值修改为4;
  • 第二个线程中把data的值修改为5。
  • 在每个进程和线程中都显示data修改前后的值。

下面是程序的运行结果,请大家参考:

PID: 4394 -> Father Process is running   //父进程在运行
the old value of data is 1                
the new value of data is 2               //父进程把data的值从1修改为2
PID: 4395 -> Son Process is running      //子进程在运行
the old value of data is 1 
the new value of data is 3               //父进程把data的值从1修改为3
Son process finished: PID = 4395          
Create first thread by 4394             //父进程创建第一个线程
The ID of thread is :3075603264 
the old value of data is 2 
the new value of data is 4              //第一个线程把data的值从2修改为4
first thread function running finished. 
Create second thread by 4394            //第一个线程运行结束后,创建第二个线程
The ID of thread is :3075603264 
the old value of data is 4 
the new value of data is 5               //第二个线程把data的值从4修改为5
second thread function running finished.

从上面的运行结果中可以看到:

  • 1.父进程和子进程分别拥有data,它们的初始值都为1;
  • 2.父进程和子进程对data的修改互不影响。父进程将data从1修改为2;子进程将data从1修改为3;
  • 3.父进程中创建了两个线程,这两个线程和父进程共享data,并且data的初始值都为2;
  • 4.第一个线程修改了data的值,data的值变为4,这也影响到了第二个线程;
  • 5.第二个线程读取到的data初始值为4,该值是第一个线程修改data后的值;

大家可以看到,同一个进程中的前一个线程对共享变量data修改后,该进程中的后一个线程就能直接得到前一个线程修改后值。因此线程间不需要专门的通信方式,这也就是我们说线程间没有通信的原因。相比之下,父进程修改了共享变量data的值,但是子进程看不到父进程对共享变量data的修改,因此,如果想在进程之间传递数据,需要专门的通信方式来进行通信。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。

各位看官,关于生产者与消费者问题的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解 。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

talk_8

真诚赞赏,手有余香

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

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

打赏作者

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

抵扣说明:

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

余额充值