程序员经典面试题:并发,容易带来哪些问题

程序员经典面试题:并发,容易带来哪些问题,第1张

编程对于很多人来说,还是比较好上手的。当你学会了一门语言,可以编写一些程序了,很快就会遇到一道坎,并发编程,单线程下好好跑着的程序,怎么就运行异常了?怎么就得不到期望的结果。在面试中,并发编程也是经常出现,我们今天来讨论一个问题, 并发编程,容易出哪些问题?

相信大家在学习并发编程的时候,都会遇到这样一个经典问题,有一个函数,执行i=i+1,执行1000遍。在单线程的环境下,得到的结果都是预期的1000。如果是两个线程同时运行,那么,得到的结果可能是2000,也有可能小于2000。

这是因为i=i+1不是一个原子 *** 作,我们会获取i的值,然后执行一次加法运算,最后将结果赋值给i。当多个线程执行的时候,获取到的i的值之后,在执行后面的动作之前,另外一个线程已经修改了i,造成最终的结果小于2000。

并发编程的时候,我们往往无法确定多个线程之间的执行顺序,经常我们会出现这样一个错误。我们在一个线程中使用的变量,会在另外一个线程中进行初始化或者赋值。最常见的,便是我们在主线程上创建一个子线程,然后再进行变量的初始化,子线程的执行可能早于父线程,造成程序错误。

为了解决并发问题,我们通常会引入锁、信号、信号量等手段来保证临界区只会被一个线程访问,或者让一个线程等待另外一个线程执行完成。但是,引入锁之后,我们又可能会出现死锁的问题,例如:线程1与线程2都需要抢占AB两把锁,假设线程1先抢占了A锁,线程2抢占了B锁,这个时候,线程1在等待B锁,线程2在等待A锁,就这样,等到海枯石烂,我们称之为死锁。

出现死锁,需要同时满足下面几个条件:1线程需要对需要的资源进行互斥访问(例如一个线程抢到锁)2持有并等待(例如一个线程抢到了A锁,然后在等待B锁)3非抢占(线程抢到了锁之后,不能被其他线程抢到)4循环等待,线程之前存在一个环路。

那么,如何解决死锁的问题呢?既然出现死锁需要同时满足上面的几个条件,那么,我们只要破坏其中一个条件,就能够避免死锁问题。

今天,我们了解到并发编程带来的问题与解决方案,希望对你在平时的工作或者面试有所帮助。

在单cpu系统中若干程序的并发执行是由(进程)实现的

进程的并发性(Concurrency)是指一组进程的执行在时间上是重叠的。

例如:

有两个进程A和B,它们分别执行 *** 作al,a2,a3和b1,b2,b3。在一个单处理器上,就A和B两个进程而言,它们的执行顺序分别为al,a2,a3和b1,b2,

,b3,这是进程执行的 *** 作的顺序性。然而,这两个进程在单处理器上它们的 *** 作可能是交叉执行的,如执行序列为al, b1, a2, b2, a3,

b3或al, b1, a2, b2, b3,

a3等,则说A和B两个进程的执行是并发的。从宏观上来看,并发性反映出一个时间段中有几个进程都处于运行还未运行结束状态,目‘这些进程都在同‘处理器上运行,但从微观上来看任一时刻仅有一个进程在处理器上运行。反过来看,并发的实质是一个处理器在几个进程之间的多路复用,并发是对有限的物理资源强制行使多用户共享,消除计算机部件之间的互等现象,以提高系统资源利用率。

并发是指两个或多个事件在同一时间间隔内发生。在多道程序环境下,并发性是指在一段时间宏观上有多个程序在同时运行,但在单处理机系统中,每一时刻却仅能只有一道程序在执行,故微观上这些程序只能时分时交替执行。

是进程之间直接的制约关系,是为完成某种任务而建立的两个或多个线程,这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

比如说进程A需要从缓冲区读取进程B产生的信息,当缓冲区为空时,进程A因为读取不到信息而被阻塞

在 *** 作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。

在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个用户同时访问和更改共享数据而彼此之间不发生冲突。

上面是百度百科上的回答 , 

通俗点的解释 , 一个冰箱 , 一家人在用 ,  最极端的情况 , 一家人在晚餐的时候 同一时间点都要从冰箱里面拿东西 , 也是排队拿, 但是交给电脑处理类似的逻辑 ,这就是错误的, 并发的存在就是保证这样的错误不会发生 ,

以上就是关于程序员经典面试题:并发,容易带来哪些问题全部的内容,包括:程序员经典面试题:并发,容易带来哪些问题、在单cpu系统中若干程序的并发执行是由什么实现的、进程的并发性是指什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9676794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存