在调用await()方法前线程必须获得重入锁(第17行代码),调用await()方法后线程会释放当前占用的锁。同理在调用signal()方法时当前线程也必须获得相应重入锁(代码32行),调用signal()方法后系统会从condition.await()等待队列中唤醒一个线程。当线程被唤醒后,它就会... ...
分类:
编程语言 时间:
2016-09-23 11:24:33
阅读次数:
255
Java提供了强制原子性的内部锁机制:synchronized块。但是内部锁是可重入的,当线程试图获得它自己占有的锁时,请求会成功。 简单的说,就是在一个synchronized方法内部调用本类的其他synchronized方法时,永远可以拿到锁。 如例子1.1所示 [java] view plai ...
分类:
编程语言 时间:
2016-09-21 13:02:30
阅读次数:
190
在翻开这本《构建之法》之前,我以为从专业划分角度来讲我多少算是一个计算机人,最起码算得上一个计算机专业的人。但是在当我谨慎的选择了一个自认为适合学习的好环境,怀着一种对编程无比向往的心情阅读这本书的时候,才意识到,之前的我可能是迈入了计算机隔壁班的门。 不得不说,邹欣老师的书,确实不像其他同类书籍那 ...
分类:
其他好文 时间:
2016-09-06 22:50:13
阅读次数:
128
线程安全:一个函数被称为线程安全的(thread-safe),当且仅当被多个并发进程反复调用时,它会一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。我们定义四类(有相交的)线程不安全函数。 第1类:不保护共享变量的函数 将这类线程不安全函数变为... ...
分类:
编程语言 时间:
2016-09-05 21:01:35
阅读次数:
176
可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序。假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的。假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的。 大多数c++类天生就是可 ...
分类:
编程语言 时间:
2016-09-04 06:51:10
阅读次数:
235
在JDK5里面,提供了一个Lock接口。该接口通过底层框架的形式为设计更面向对象、可更加细粒度控制线程代码、更灵活控制线程通信提供了基础。实现Lock接口且使用得比较多的是可重入锁(ReentrantLock)以及读写锁(ReentrantReadWriteLock)。 1. ReentrantLo ...
分类:
编程语言 时间:
2016-08-27 23:16:52
阅读次数:
382
1. 可重入函数 (1)不使用静态变量和全局非const变量 (2)不使用锁 (3)不调用任何不可重入函数 (4)使用volatile防止寄存器缓存变量 See Aslo : CPU的乱序执行,会使得对共享变量的访问变得不可知 2. 线程 用户使用的是用户态线程,Kernel运行的是内核态的线程 O ...
分类:
编程语言 时间:
2016-08-22 12:21:52
阅读次数:
169
在多任务操作系统环境中,应用程序的各个任务是并发运行的,所以会经常出现多个任务“同时”调用同一个函数的情况。这里之所以在“同时” 这个词上使用了引号,是因为这个歌”同时“的含义与我们平时所说的同时不是一个概念。这里所说的“同时”实质上是指多个任务在同一个时间段内交叉调用同一个函数的情况,这是并发系统 ...
分类:
其他好文 时间:
2016-08-20 11:22:55
阅读次数:
193
本文转载自:http://www.cnblogs.com/parrynee/archive/2010/01/29/1659071.html 可重入函数 在 实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 ...
分类:
其他好文 时间:
2016-08-14 16:15:31
阅读次数:
133
线程安全:一般来说,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或..
分类:
编程语言 时间:
2016-08-03 06:49:21
阅读次数:
294