无锁编程的探索与研究
2011-06-12郭加盛李健北京工业大学计算机学院北京100124
网络安全技术与应用 2011年2期
郭加盛 李健北京工业大学计算机学院 北京 100124
0 前言
在计算机多核技术迅速发展的时代,线程的优势越来越明显,多线程的学习成为每个程序员必备的基础。但在实际开发过程中,越来越多的异常,越来越多的死锁现象让每个程序员崩溃不已,线程与锁的问题凸显在每个程序员的面前。
线程和进程的区别在于,子进程和父进程有不同的代码和数据空间,而多个线程则共享数据空间,每个线程有自己的执行堆栈和程序计数器为其执行上下文。多线程主要是为了节约CPU时间,发挥利用,根据具体情况而定。线程的运行中需要使用计算机的内存资源和CPU。
在多道程序设计的环境下,多个进程竞争同一资源的现象时有发生。当进程申请的资源被其他进程占用时,就有可能发生死锁。死锁的概念比较抽象,简单理解,每个汽车都是一个资源,他们都在申请路口这个资源,错误!未找到引用源。就生动的描述了死锁的现象。
1 基于锁的传统编程技术
作为一个程序员,我们对基于锁的多线程解决方案并不陌生。经典基于锁的多数据操作必须以原子操作的形式出现,这样才能保证在本线程执行的过程中没有其它线程来破坏相应数据的一致性,即便像“++count”这样的简单操作也得加锁,因为增量操作实际上是分三步进行的:读、改、写(回),而这显然不是原子的。
简而言之,在基于锁的多线程编程中,你需要确保任何针对共享数据的、且有可能导致竞争条件的操作都被做成了原子操作(通过对一个 mutex或 lock进行加锁解锁,参见Semaphore与Mutex的关系)。……
登录APP查看全文
