2 a305985895 a305985895 于 2015.07.12 17:35 提问

请问多线程的同步和串行有什么区别

如果一段代码被锁住执行完再去执行另一段代码,这和顺序执行有什么区别呢,求各位大神解答啊

11个回答

devmiao
devmiao   Ds   Rxr 2015.07.12 23:44

没错,同步的代码,从本质上说,相当于串行(非并发)执行。

danielinbiti
danielinbiti   Ds   Rxr 2015.07.12 17:46

多线程只有同步和异步之分,没有同步和串行。
串行一般只代码一行行有序执行。至于同步异步实际不关心。

danielinbiti
danielinbiti 回复a305985895: 同步是相对于资源来说,和顺序没关系。比如有2个线程,都用变量a。如果对变量a的操作需要同步,则这2个线程访问到a变量时,需要等待,但是a变量外的其他执行语句或者访问,则可以是异步的。这和顺序是不一样的。顺序只针对单线程
2 年多之前 回复
a305985895
a305985895 我的意思是如果同步了,不就跟顺序执行一个意思了么,执行完一个块再执行另一个块,那这样的话多线程的同步实际上没有实现并发啊,这个时候的多线程是为了什么
2 年多之前 回复
zuishikonghuan
zuishikonghuan   2015.07.12 19:42

同步是指多个线程访问同一个资源时防止两个线程交错执行引发数据异常
比如Windows下就可以用事件对象,互斥体,自旋锁,信号灯,快速互斥体(快速互斥体限驱动程序专用)来进行线程同步。
线程同步本质上就是让在一个线程运行时其他线程等待(挂起或自旋),当线程完成后,其他线程被激活,因为现代操作系统是多任务抢占式的系统,系统可能随时进行上下文切换,因此线程同步显得非常重要。
至于串行,打个比方,某个设备只能支持同时接收线路上的一个请求,那么就需要设备的驱动程序实现串行化,把请求添加到一个处理队列中,先来先处理,一个个处理。
PS:同步和串行是两个概念,同步和异步相对,串行与并行相对,二者没有绝对的关系

FireBurn
FireBurn   2015.07.14 12:08

看得出来,楼主对于并发和多线程的一些概念理解上和大家有些出入,而且缺乏实际的经验。
这里打个比方,借用超市运货来说明:
有一家超市要把货搬到仓库里,可以选择一个人来搬货(**单线程**)或者多叫几个人来搬货(**多线程**)。很显然在这里并发提升了效率。
继续深入这个场景,假设有些货物需要搬到地下的仓库,需要通过电梯运输。但是电梯的容量有限,如果电梯走了,其他使用电梯的人就必须等待。
这里电梯可以看作一个**受限的资源**或者**同步区域**。在这里等待是必须的,所以这里的矛盾就是需要使用的资源是有限的。
再来看一下操作系统对于CPU的调度:
假设一个单核的CPU,只能运行一个线程,但是现在有多个线程要运行,怎么办?你可以让CPU在不同的线程之间切换,每个线程只准运行一小段时间。
只要切换的速度够快,给人的感觉就好像是在同时运行多个线程。那么在这里线程切换的意义就在于提升交互体验。

a305985895
a305985895   2015.07.12 17:49

我的意思是如果同步了,不就跟顺序执行一个意思了么,执行完一个块再执行另一个块,那这样的话多线程的同步实际上没有实现并发啊,这个时候的多线程是为了什么呢

u012216727
u012216727   Ds   Rxr 2015.07.12 19:00

其实多线程你可以看做是几条执行程序的执行过程的,多线程是用来处理一些需要相对同时解决问题的问题的。

cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.07.12 20:57
SunliyMonkey
SunliyMonkey   2015.07.13 19:20

对于同步区域的访问,多个线程相当于是串行执行的(谁先获得访问的权限,谁先去执行)

但是,这个与传统的串行程序是不一样的。这里串行的区间只是“同步区域”,而并非整个程序。

oyljerry
oyljerry   Ds   Rxr 2015.07.12 17:51

线程同步本来就是为了控制两段在不同线程中执行顺序。一般是event等事件来控制这个流程
还有一种就是不关心执行顺序,只关心两个线程不能同时访问,这个就是就是加锁互斥。

多线程同步就是可以只把某些代码做先后顺序控制,但是其它代码没有控制的就可以多个线程同时执行。这个不象单线程永远都是顺序的

oyljerry
oyljerry 回复a305985895: 不是如果线程之间有同步,就会降低并发,但是有时候这是一种实际情况。为了提高并发就应该少引入线程之间通信
2 年多之前 回复
a305985895
a305985895 回复oyljerry: 就是说实际上同步的时候并不涉及多核并发的效率问题,仅仅是因为以线程的形式比顺序执行更灵活,可以这么理解么大神
2 年多之前 回复
oyljerry
oyljerry 回复a305985895: 这就是多线程的灵活性。
2 年多之前 回复
oyljerry
oyljerry 回复a305985895: 对啊,多线程即有并发,也有各自执行一些逻辑,但是一定条件后又希望它们同步一下。
2 年多之前 回复
a305985895
a305985895 我的意思是多线程是为了实现并发提升效率,这样的同步不就等价于代码块顺序执行么?那这个时候多线程是为了实现什么呢,我不是很理解
2 年多之前 回复
notfindjob
notfindjob   2015.07.25 17:36

顺序执行是单线程从上往下执行代码,而一段代码被锁住是指这段代码锁在一个线程上,此线程是顺序执行,其他线程不能在解锁前执行,这是防止线程竞争同一个资源

共11条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片