线程安全的实现方法。 先来说说几个概念: 1.同步:多线程并发访问共享数据的时候,保证共享数据在同一时刻只能被一个(一些,使用信号量时)线程使用。 2.临界区:每个进程中访问临界资源的那段代码。 3.临界资源:每次仅允许一个进程访问的资源。 4.信号量:相当于一个计数器,每当一个进程使用一个资源,信 ...
分类:
编程语言 时间:
2017-09-18 20:36:42
阅读次数:
159
1.Lock 2.Monitor类 这个算是实现锁机制的纯正类,在锁定的临界区中只允许让一个线程访问,其他线程排队等待。主要整理为2组方法。 2.1Monitor.Enter和Monitor.Exit 微软很照护我们,给了我们语法糖Lock,对的,语言糖确实减少了我们不必要的劳动并且让代码更可观,但 ...
分类:
其他好文 时间:
2017-09-12 18:36:22
阅读次数:
173
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的... ...
分类:
编程语言 时间:
2017-09-05 01:45:28
阅读次数:
255
本文不没有任何知识可讲,只是帖上自己测试的结果。 想看底层原理的可以直接关闭。 不过对于急着要选方案的人,倒提供一些帮助。 先说一些无关紧要的废话: 先说说为什么会有这篇文章。 我在做练习的时候,参考一些老代码,发现了CRITICAL_SECTION这个类型。以前没有用过。查了一下,三个要点:win ...
分类:
其他好文 时间:
2017-08-27 10:02:57
阅读次数:
270
存在共享资源(共享一个文件,一块内存等等)的时候,为了防止并发访问时共享资源的数据不一致,引入了同步机制。 主要内容: 1. 同步的概念 了解同步之前,先了解另外2个概念: 临界区 - 也称为临界段,就是访问和操作共享数据的代码段。 竞争条件 - 2个或2个以上线程在临界区里同时执行的时候,就构成了 ...
分类:
系统相关 时间:
2017-08-24 20:07:00
阅读次数:
190
原blog:http://www.cnblogs.com/wang_yb/archive/2013/05/01/3052865.html 内核中提供了多种方法来防止竞争条件,理解了这些方法的使用场景有助于我们在编写内核代码时选用合适的同步方法, 从而即可保证代码中临界区的安全,同时也让性能的损失降到 ...
分类:
系统相关 时间:
2017-08-20 15:50:41
阅读次数:
195
常用的同步原语锁,到多核处理器时代锁已经是必不可少的同步方式之一了。无论设计多优秀的多线程数据结构,都避不开有竞争的临界区,此时高效的锁显得至关重要。锁的颗粒度是框架/程序设计者所关注的,当然越细越好(也不尽然),同时不同的锁往往也会体现出完全不同的效率,Linux有posix的pthread_mu ...
分类:
其他好文 时间:
2017-08-20 15:45:28
阅读次数:
541
一 Test-and-Set Lock 所谓测试设置是最基本的锁,每个线程共用一把锁,进入临界区之前看没有有线程在临界区,如果没有,则进入,并上锁,如果有则等待。java实践中利用了原子的设置state变量来保证一次只有一个线程可以获得到锁。 这种锁优点就是简单,缺点是在硬件层面上读取state时候 ...
分类:
编程语言 时间:
2017-08-17 20:00:21
阅读次数:
289
锁的释放-获取建立的happens before 关系 锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息。 下面是锁释放-获取的示例代码: [java] view plaincopy class MonitorExample { in ...
分类:
编程语言 时间:
2017-08-09 21:09:24
阅读次数:
177