1.原子操作 内核提供两组原子操作的接口,一组是对整数进行操作,一组是对单独的位进行操作。现实中,每个临界区不仅仅是对变量的增加、减少,可能临界区域甚至跨越几个函数,而这些都需要保证原子性,因此引入各种锁机制。2.自旋锁 linux内核中最常见的锁是自旋锁。自旋锁最多只能被一个可执行线程持有。 .....
分类:
其他好文 时间:
2014-11-21 13:58:49
阅读次数:
158
关于int全区变量读写的原子性
关于int变量的读写是否原子性网上有很多讨论,貌似不同平台不同,这里自己做实现在arm9平台测试。这里要注意原子性并非指一条汇编才原子,实际上即使一次赋值编译成几条汇编依然可以是原子的,只要保证该内存不产生中间值,只有原值和目标值两种状态则就是原子的。对一个int变量赋值是否要进入临界区呢?
以下基于arm920t cpu Sourcer...
分类:
其他好文 时间:
2014-11-21 12:40:48
阅读次数:
282
//无名信号量的常见用法是将要保护的变量放在sem_wait和sem_post中间所形成的临界区内,这样该变量就会被//保护起来,例如:#include #include #include #include #include int number; // 被保护的全局变量sem_t sem_id.....
分类:
编程语言 时间:
2014-11-20 18:17:44
阅读次数:
293
之前看侯捷翻译的《win32多线程程序设计》中关于线程同步中的临界区问题,其中举得例子是对链表的操作。死锁的问题是对一个Swaplist函数的问题,现列举代码如下:void SwapLists(List *list, List *list2){ List *tmp_list; EnterCrit.....
分类:
编程语言 时间:
2014-11-14 00:06:57
阅读次数:
256
自旋锁(Spinlock)是一种 Linux 内核中广泛运用的底层同步机制。自旋锁是一种工作于多处理器环境的特殊的锁,在单处理环境中自旋锁的操作被替换为空操作。当某个处理器上的内核执行线程申请自旋锁时,如果锁可用,则获得锁,然后执行临界区操作,最后释放锁;如果锁已被占用,线程并不会转入睡眠状态,而是忙等待该锁,一旦锁被释放,则第一个感知此信息的线程将获得锁。...
分类:
其他好文 时间:
2014-11-11 21:09:31
阅读次数:
316
这篇讲讲ReentrantLock可重入锁,JUC里提供的可重入锁是基于AQS实现的阻塞式可重入锁。这篇
聊聊高并发(十六)实现一个简单的可重入锁 模拟了可重入锁的实现。可重入锁的特点是:
1. 是互斥锁,基于AQS的互斥模式实现,也就是说同时只有一个线程进入临界区,唤醒下一个线程时也只能释放一个等待线程
2. 可重入,通过设置了一个字段exclusiveOwnerThread来标示当前获...
分类:
编程语言 时间:
2014-11-11 19:21:34
阅读次数:
616
前几篇分析了一下AQS的原理和实现,这篇拿Semaphore信号量做例子看看AQS实际是如何使用的。
Semaphore表示了一种可以同时有多个线程进入临界区的同步器,它维护了一个状态表示可用的票据,只有拿到了票据的线程尽可以进入临界区,否则就等待,直到获得释放出的票据。Semaphore常用在资源池中来管理资源。当状态只有1个0两个值时,它退化成了一个互斥的同步器,类似锁。
...
分类:
编程语言 时间:
2014-11-11 14:31:26
阅读次数:
216
Windows 临界区,内核事件,互斥量,信号量。临界区,内核事件,互斥量,信号量,都能完成线程的同步,在这里把他们各自的函数调用,结构定义,以及适用情况做一个总结。临界区:适用范围:它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码快同步,效率比较高。相关结构:CRITICA...
分类:
编程语言 时间:
2014-11-05 22:49:52
阅读次数:
239
Single Threaded Execution 也称为 Critical Section 临界区:危险区域 或者Critical RegionSingle Threaded Execution 是把视点放在运行的线程上所取的名称而Critical Session 或Critical Region...
分类:
其他好文 时间:
2014-11-05 21:16:36
阅读次数:
238
在《多线程编程之数据访问互斥》一文中简单介绍了原子锁,这里再详细说一下原子锁的概念和用途。(1)简单数据操作 如果在一个多线程环境下对某个变量进行简单数学运算或者逻辑运算,那么就应该使用原子锁操作。因为,使用临界区、互斥量等线程互斥方式将涉及到很多操作系统调用和函数调用等,效率肯定不如原子操作...
分类:
编程语言 时间:
2014-10-31 11:35:27
阅读次数:
214