C++面向对象多线程编程 7.0分
读书笔记 第2页
Y22

并发编程和并行编程可能难度相当大。多线程环境引入了单线程环境不具有的许多缺陷。因为程序指令在单线程环境中一次只执行一条,所以程序员不必担心存在两条竞争、可能相互排斥的程序指令。任何需要访问数据或某些设备的程序指令,必须排队等待访问数据或设备的机会。另一方面,多线程环境可能使多程序指令试图在同一时刻访问同一块数据或资源。这种情况可能导致死锁(deadlock)、无限延迟(indefinite postponement)以及数据竞争(data race)。当两个或更多的线程紧密关联,而且无法进一步执行时,就会发生死锁。死锁将导致应用程序或系统的停顿。无限延迟指线程A一直等待线程B的完成,然后才能继续自己的处理。但糟糕的是,线程B永远不能完成它该做的事,这时就产生了无限延迟。所以,线程A将一直等待永远也不会发生事件的执行。不幸的是,为了解决这一问题,通常需要强行删除所有线程,使得进程将非正常终止。在并发编程时,当多个线程试图同时更新同一个数据块时,就会发生最后一个恼人的问题:数据竞争。谁应该首先访问目标数据?应首先使用哪一部分更新?多线程编程带来表现力和操作性能好处的同时,死锁、无限延迟吃以及数据竞争这些不利因素总是威胁着某些应用程序,使它们出现意外不正常终止。

0
《C++面向对象多线程编程》的全部笔记 4篇
豆瓣
免费下载 iOS / Android 版客户端