在Java并发编程里头,锁是一个非常重要的概念。就如同现实生活一样,如果房子上了锁。别人就进不去。Java里头如果一段代码取得了一个锁,其它地方再想去这个锁(或者再执行这个相同的代码)就都得等待锁释放。锁其实分成非常多。比如有互斥锁、读写锁、乐观锁、悲观锁、自旋锁、公平锁、非公平锁等。包括信号量其实都可以认为是一个锁。...
分类:
编程语言 时间:
2016-07-11 09:11:33
阅读次数:
278
CAS有两个特点: 1、for循环 2、compareAndSet(可能别的线程先改变然后又重置,此时CAS是成功的,也就是CAS执行的过程中,可能多个线程对此变量做了修改,而不是各个线程互斥的修改) 3、CAS和互斥锁不同,CAS可以多个线程同时执行成功。 Thread.join() 下面是源码。 ...
分类:
编程语言 时间:
2016-07-04 23:34:29
阅读次数:
240
12.4.1 互斥锁属性ExampleExample12.4.2 读写锁属性12.4.3 条件变量属性12.4.4 Barrier属性 12.4.1 互斥锁属性 互斥锁属性使用结构pthread_mutexattr_t结构进行存储,在11章中,我们使用PTHREAD_MUTEX_INITIALIZE... ...
分类:
其他好文 时间:
2016-07-02 20:09:47
阅读次数:
278
互斥量和临界区非常相似,只有拥有了互斥对象的线程才可以访问共享资源,而互斥对象只有一个,因此可以保证同一时刻有且仅有一个线程可以访问共享资源,达到线程同步的目的。 互斥量相对于临界区更为高级,可以对互斥量进行命名,支持跨进程的线程同步。互斥量是调用的Win32的API对互斥锁的操作,因此在同一操作系 ...
分类:
编程语言 时间:
2016-07-01 18:09:28
阅读次数:
155
ReentrantLock介绍
ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。
顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。
ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。“锁”是为了保护竞争资源,防止多个线程同时操作线...
分类:
编程语言 时间:
2016-07-01 11:56:56
阅读次数:
284
@synchronized 的作用是创建一个互斥锁,保证此时没有其它线程对self对象进行修改。这个是objective-c的一个锁定令牌,防止self对象在同一时间内被其它线程访问,起到线程的保护作用。 一般在公用变量的时候使用,如单例模式或者操作类的static变量中使用。 大概就是如果线程A访 ...
分类:
其他好文 时间:
2016-06-22 12:46:16
阅读次数:
160
pthread接口允许我们通过设置与不同对象相关联的属性来微调线程以及同步对象的行为。通常来说,管理这些属性的函数符合如下模式: 每一个对象都有与其相关联的属性对象类型(线程由线程属性,互斥锁由互斥锁属性,等等),一个属性对象可以表示多个属性。属性对象对于应用程序来说是不透明的,也就是说应用程序并支... ...
分类:
编程语言 时间:
2016-06-21 06:31:08
阅读次数:
244
1、互斥锁的初始化pthread_mutex_init()函数语法 2、互斥锁上锁、判断上锁、解锁、销毁锁pthread_mutex_函数语法 代码分析: ...
分类:
编程语言 时间:
2016-06-19 10:12:55
阅读次数:
199
开发使用多线程过程中,不可避免的会出现多个线程同时操作同一块共享资源,当操作全部为读时,不会出现未知结果,一旦当某个线程操作中有写操作时,就会出现数据不同步的事件.而出现数据混乱的原因:资源共享(独享资源则不会)调试随机(对数据的访问会出现竞争)线程间缺少必要的同步机..
分类:
编程语言 时间:
2016-06-17 00:53:40
阅读次数:
226
条件变量是线程之前同步的另一种机制。条件变量给多线程提供了一种会和的场所。当条件变量和互斥锁一起使用时,允许线程以无竞争的方式等待特定的条件发生。这样大大减少了锁竞争引起的线程调度和线程等待。 消息队列是服务器端开发过程中绕不开的一道坎,前面,我已经实现了一个基于互斥锁和三队列的消息队列,性能很不错 ...
分类:
其他好文 时间:
2016-06-16 09:12:54
阅读次数:
204