线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能越强大,性能就会越低。 1、互斥锁 互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线程和一个任务队列。任何是一个线程都要使用互斥 ...
分类:
编程语言 时间:
2018-07-27 12:01:27
阅读次数:
231
在没有写操作的时候,两个线程同时读一个资源没有任何问题,允许多个线程同时读取共享资源。 但是如果有一个线程想去写这些共享资源,就不应该再有其它线程对该资源进行读或写。 简单来说,多个线程同时操作同一资源时,“读读共存,写写不共存,读写不共存”。 读写锁的锁定规则如下:获得读锁后,其它线程可获得读锁而 ...
分类:
编程语言 时间:
2018-07-26 22:10:19
阅读次数:
171
源码分析, 读写锁, ReentrantReadWriteLock ...
分类:
其他好文 时间:
2018-07-26 15:09:47
阅读次数:
160
简介: 读写锁很像一个互斥量,他阻止多个线程同时修改共享数据的另一种方法,区分不同互斥量的是他是分读数据和写数据,一个读写锁允许同时多个线程读数据,只要他们不修改数据。 当一个线程锁住一个读写锁时,他选择共享读访问或独占写访问。当有任何线程在写访问时,想要访问的读线程不能继续;当其他线程进行读写时, ...
分类:
其他好文 时间:
2018-07-18 14:20:57
阅读次数:
167
java中实现同步的两种方式:syschronized和lock的区别和联系 **** 当一个线程进入了一个对象是的synchronized方法,那么其它线程还能掉否调用此对象的其它方法? 这个问题需要分几种情况进行讨论。 1)查看其它方法是否使用了同步关键字(synchronized)修饰,如果没 ...
分类:
其他好文 时间:
2018-07-01 14:12:22
阅读次数:
137
public interface ReadWriteLock ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader 线程同时保持。写入锁是独占的。 访问约束 ||read|write| |: :|: :|: :| ...
分类:
编程语言 时间:
2018-06-30 17:44:32
阅读次数:
139
学习了apue3rd的第11章,主要讲的是多线程编程。因为多线程共享进程的资源比如堆和全局变量,多线程编程最重要的是,使用各种锁进行线程同步。 线程编程首先要学习的三个函数如下: #include <pthread.h> int pthread_create(pthread_t* tidp, con ...
分类:
编程语言 时间:
2018-06-27 20:04:33
阅读次数:
172
可重入锁指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁。它是基于thread粒度的,per-thread。不可重入锁指的是每次使用锁方法时,都需要重新获取锁,即使在同一线程中调用同一方法都需要等待上一个锁的释放。它是基于method粒度的,per-invocation。可重入锁与不可重复锁的例子//设计一个锁publicclassLoc
分类:
其他好文 时间:
2018-06-25 17:02:25
阅读次数:
195
认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就搞定 了,如果说不考虑性能问题的话,这一操绝对能应对百分之九十以上的情况,若对于性能方面有要求的话就需要额外的知识比如读写锁等等。本文目的先了解透彻synch ...
分类:
其他好文 时间:
2018-06-24 19:28:15
阅读次数:
185
本人设计了一个高效读写锁,可实现多个线程读一个线程写的锁,应该比Delphi自带的读写锁高效,本人没有做对比测试。 本文的锁不可以在一个线程里重入,否则会锁死,另外读写锁最多支持65535个线程同时读。 一个简易无锁池 一个简易 无锁池 1.所有读写无等待,不需要判断条件直接读写(除自动扩充容量时) ...