自旋(spin)是一种通过不间断地测试来查看一个资源是否变为可用状态的等待操作,用于仅需要等待很短的时间等待所需资源的场景。使用自旋这种“空闲循环(busy-loop)”来完成资源等待的方式要比通过上下文切换使线程转入睡眠状态的方式要高效得多。但如果自旋了一个很短的时间后其依然无法获取资源,则仍然会...
分类:
数据库 时间:
2015-09-15 12:44:09
阅读次数:
375
读写自旋锁1:什么是自旋锁?自旋锁就是互斥的同步原语,试图进入临界区的线程只用忙等的方式检测锁的状态。如果检测到锁未被持有,则进入临界区。因为采用忙等的方式,所以自旋锁必须是锁住很小的一块儿代码,并且很短的时间片。2:读写自旋锁?有些线程在临界区内只是简单的读取一些信息,不会涉及到信息的修改,允许读...
分类:
其他好文 时间:
2015-09-11 10:36:03
阅读次数:
191
产生竞态的情况:(1)对称多处理器(SMP)的多个CPU(2)单CPU的进程与抢占它的进程(3)中断与进程之间解决竞态途径:互斥访问临界区:访问共享资源的代码区互斥途径:中断屏蔽、原子操作、自旋锁、信号量、互斥体中断屏蔽local_irq_disable() /*屏蔽中断*/ ...critical...
分类:
系统相关 时间:
2015-09-07 19:34:58
阅读次数:
334
1.阻塞式IO:套接字默认是阻塞式的,该模型会一直阻塞在系统调用上,直到数据到达内核区并且完成从内核区到用户进程区的数据拷贝。
2.非阻塞式IO:该模型将套接字的状态设置为非阻塞,会一直轮询套接字的状态,直到数据到达内核区并且完成内核区到用户区的数据拷贝,个人感觉类似于linux下的自旋锁。
3.IO复用:该模型通常阻塞在select/poll系统调用,当内核区数据到达时,select系统调用...
分类:
其他好文 时间:
2015-08-18 10:16:15
阅读次数:
112
代码:#import #import extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));// pthread_mutex_lockvoid dispatch_once_pthread(dispatch_once...
分类:
其他好文 时间:
2015-08-16 18:10:39
阅读次数:
180
1、原子操作,是其它同步方法的基础。2、自旋锁,线程试图获取一个已经被别人持有的自旋锁,当前线程处于忙等待,占用cpu资源。3、读写自旋锁,根据通用性和针对性的特点,普通自旋锁在特定场景下的表现会退化。因此,提供了读写自旋锁,读锁可以加读锁,不能加写锁,写锁不能加任何锁。4、需要注意的几项: 普通....
分类:
系统相关 时间:
2015-08-13 21:43:15
阅读次数:
265
代码:#import "ViewController.h"extern uint64_t dispatch_benchmark(size_t count, void (^block)(void));@interface ViewController ()// 原子属性 - 互斥锁实现@propert...
分类:
其他好文 时间:
2015-08-11 13:48:08
阅读次数:
190
原文:无锁数据结构(Lock-Free Data Structures)一个星期前,我写了关于SQL Server里闩锁(Latches)和自旋锁(Spinlocks)的文章。2个同步原语(synchronization primitives)是用来保护SQL Server里的共享数据结构,例如缓存...
分类:
其他好文 时间:
2015-08-03 01:04:45
阅读次数:
178
周日傍晚,我去家附近的超市(...)买苏打水,准备自制青柠苏打,我感觉我做的比买的那个巴黎水要更爽口。由于天气太热,很多人都去超市避暑去了,超市
也不撵人,这仿佛是他们的策略,人过来避暑了,走的时候难免要买些东西的,就跟很多美女在公交地铁上看淘宝消磨时光,然后就..
分类:
其他好文 时间:
2015-08-02 06:35:45
阅读次数:
158