windows程序设计(24):再谈多线程

之前说的实在是太肤浅了,现在有了一点心的认识,就多说几句。

首先,为什么要搞多线程?除了线程间通信方便之外,还有一个重要的原因是线程可以被分配时间片,这样,假如一个程序有很复杂的任务要执行,需要花很长时间,那么我们可以将它写成一个多线程的,让它有多次机会被CPU“临幸”到,所以多线程程序运行起来,感觉CPU的占有率特别高。

当然,线程之间的同步是一个非常关键的因素,因为CPU的时钟一到,就切换走了,是按照一条机器指令执行完就切换的,并不是一行C语句之类的;假如线程1向一个变量里存了一个值,下面会使用它,但是使用之前切换到另一个线程2,线程2向其中重新写了一个值,那么等下一次线程1再去读里面的值时,就会发生了变化。所以,对于多个线程共享变量,一定要同步机制保护起来。

程序员经常使用的同步机制是关键代码段,它的作用如下:每个进程在访问共享变量前,先进入关键代码段,如果能进入,那么在里面完成对共享变量的操作,如果不能进入关键代码段,则原地等待。如果期间CPU切换到另一个线程,那么它在访问共享变量前,也要进入关键代码段才能继续,但是由于前一个线程在关键代码段中,还没有出来,所以他进不去,自然也就无法访问共享变量了。直到前一个线程退出关键代码段后,后一个线程才有机会访问共享代码。对于那些并没有使用关键代码段保护的操作,依然是正常的执行,不受影响。

说白了,关键代码段保护的,不是某个被共享的变量,而是读写变量的动作!所以在程序中,如果有多个线程都要访问一个共享的变量,那么它们都要在访问共享变量前加上与关键代码段相关的代码。


在程序的设计时,关键代码段所保护的操作应该越少越好,因为多线程的目的是为了让程序“并发”执行,(对于单核CPU,是更多的时间片“临幸”到一个进程的多个线程上),但是如果有一个线程中关键代码段所保护的操作要执行很长时间,那么其他线程如果也有访问关键代码段的操作,就只能干等着。这也就违背了多线程的本意了。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值