码迷,mamicode.com
首页 >  
搜索关键字:自旋锁    ( 344个结果
聊聊高并发(九)实现几种自旋锁(四)
这篇看一下时限队列锁的一种实现方式。 java并发包中的Lock定义包含了时限锁的接口: public interface Lock { void lock(); void lockInterruptibly() throws InterruptedException;  boolean tryLock(); boolean tryLock(long t...
分类:其他好文   时间:2014-10-27 14:27:59    阅读次数:169
聊聊高并发(七)实现几种自旋锁(二)
在聊聊高并发(六)实现几种自旋锁(一) 这篇中实现了两种基本的自旋锁:TASLock和TTASLock,它们的问题是会进行频繁的CAS操作,引发大量的缓存一致性流量,导致锁的性能不好。 对TTASLock的一种改进是BackoffLock,它会在锁高争用的情况下对线程进行回退,减少竞争,减少缓存一致性流量。但是BackoffLock有三个主要的问题: 1. 还是有大量的缓存一致性流量,...
分类:其他好文   时间:2014-10-23 12:40:05    阅读次数:217
自旋锁spinlock解析
1 基础概念 自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。   由于自旋锁使用者一般保持锁时间非常短,因此选择自旋而不是睡眠是非常必要的,自旋锁的效率远高于互斥锁。   信号量和读写信号量适合于保持时间较长的情况,它们会导致调用者睡眠,因此只能在进程...
分类:其他好文   时间:2014-10-23 10:45:39    阅读次数:251
Nginx 源码完全注释(11)ngx_spinlock
Nginx 是多进程模式的,一个 master 与多个 workers,一般工作在多核 CPU 上,所以自旋锁就是必须用到的。Nginx 中的自旋锁的定义,位于 ngx_spinlock.c 中,如下:voidngx_spinlock(ngx_atomic_t *lock, ngx_atomic_i...
分类:其他好文   时间:2014-10-22 17:42:02    阅读次数:232
聊聊高并发(六)实现几种自旋锁(一)
在聊聊高并发(五)理解缓存一致性协议以及对并发编程的影响 我们了解了处理器缓存一致性协议的原理,并且提到了它对并发编程的影响,“多个线程对同一个变量一直使用CAS操作,那么会有大量修改操作,从而产生大量的缓存一致性流量,因为每一次CAS操作都会发出广播通知其他处理器,从而影响程序的性能。” 这一篇我们通过两种实现自旋锁的方式来看一下不同的编程方式带来的程序性能的变化。 先理解一...
分类:其他好文   时间:2014-10-22 14:45:38    阅读次数:279
自旋锁死锁
自旋锁内调用kmalloc或者copy_to_user之类的接口可能造成死锁。这类函数的实现内有睡眠操作,睡眠时产生了进程调度,新的进程内如果也使用了该自旋锁,就会导致死锁。这类问题非常普通,但很容易忽略;屏蔽的方式:1,使用get_free_page申请内存2,对资源使用引用计数保护3,使用互斥锁
分类:其他好文   时间:2014-10-21 13:44:04    阅读次数:205
关于多核系统同步互斥的小研究
在多核系统中,会存在多个CPU核竞争同一资源的情形,这就必须有一些机制来保证在竞争中不会出现错误,即同步互斥机制。这里主要针对同步互斥原语之一的自旋锁进行一点分析和记录。上图为一个多核系统的中断部分,很显然中断部分会存在许多竞争相关问题。自旋锁(Spinlock) 自旋锁是用来在多处理器环境...
分类:其他好文   时间:2014-10-18 16:47:22    阅读次数:650
linux自旋锁
#include #include #include #include #include static int i=0,j=100; struct task_struct *MyThread1=NULL; struct task_struct *MyThread2=NULL; static int myVar = 0; static int count = 0; spinloc...
分类:系统相关   时间:2014-09-30 11:34:29    阅读次数:239
APUE学习笔记——11 线程同步、互斥锁、自旋锁、条件变量
线程同步     同属于一个进程的不同线程是共享内存的,因而在执行过程中需要考虑数据的一致性。     假设:进程有一变量i=0,线程A执行i++,线程B执行i++,那么最终i的取值是多少呢?似乎一定是i=2;其实不然,如果没有考虑线程同步,i的取值可能是1.我们先考虑自加操作的过程:a,首先将内存中i的值copy到寄存器;b,对寄存器中i的copy进行自加;c,将寄存器中自加的结...
分类:编程语言   时间:2014-09-25 14:13:09    阅读次数:297
windows内核初窥(二)-----系统机制
系统机制:windows2000为执行体、内核、设备驱动程序等核心态部分提供了一些基础机制。先让我们看看都有哪些:(1)陷阱调度:包括中断、延迟过程调用(DPC)、异步过程调用(APC)、异常处理、系统服务调度。(2)执行体对象管理(3)同步机制:自旋锁、内核调度对象以及等待是如何实现的(4)系统线...
分类:Windows程序   时间:2014-09-17 20:22:12    阅读次数:340
344条   上一页 1 ... 30 31 32 33 34 35 下一页
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!