> 健康
什么是阻塞队列(什么是阻塞队列的概念)
导语:什么是阻塞队列
阻塞队列是线程安全的,但是需要等待一个临界区。
临界区是一个内存空间,它包含了一个数据块(通常是栈)和一个指针变量。当这个指针指向的元素被修改时,就会引发一个异常。如果该元素没有被改变,那么该指针会返回nll;否则就会继续执行下去直到遇到另一个新的数据元素或者发生错误为止。
当两个线程同时访问同一个资源的时候就会出现这个问题:第一个线程在修改完某个变量的值之后立即离开并创建一个新的线程去读取它的副本;然而第二个线程并不知道这个变量的值已经发生了改变,因此它会一直等到第一个进程离开之后才进行操作。由于这两个进程都希望获得相同的副本而不是不同的副本(即它们都认为自己的行为是正确的),因此它们之间就产生了竞争关系:第一个进程先获取到当前变量的拷贝并返回给第二个进程以供后者使用;而第二个进程则试图从第一个进程中夺取到这个拷贝来防止其再次被其他程序所使用。(注意:这里说的&34;并不等同于我们通常所说的抢占。)
如果这两个任务能够顺利完成的话那倒也相安无事-但问题是这两个任务是互相冲突的!当一个任务正在处理某项工作的时候另外一个却突然插入进来并且试图取代这项工作的话这显然是不可能的!于是就会产生一种叫做死锁的现象-也就是所谓的竞争条件无法满足的情况了。
死锁的产生是由于两个或多个互斥的执行单元在同一时间对同一资源进行了访问而产生的结果-因为此时这些并发执行的单元并没有任何共享的数据或状态信息可供他们分享和传递信息。
死锁产生的原因有很多种说法,不过其中比较普遍的说法就是以下两种原因造成的:
1.在多道程序设计中各个程序的运行顺序不同;
2.程序设计者没有考虑并发控制问题导致多个程序同时执行时会造成相互之间的干扰甚至使系统出现崩溃的情况。
本文内容由小葵整理编辑!