易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核的同步机制

 本文周详的介绍了Linux内核中的同步机制:原子操作、信号量、读写信号量和自旋锁的API,使用需求及一些典型示例
  一、引言
  在现代操作系统里,同一时间可能有多个内核执行流在执行,因此内核其实象多进程多线程编程相同也需要一些同步机制来同步各执行单元对共享数据的访问。尤其是在多处理器系统上,更需要一些同步机制来同步不同处理器上的执行单元对共享的数据的访问。
 
 在主流的Linux内核中包含了几乎所有现代的操作系统具有的同步机制,这些同步机制包括:原子操作、信号量(semaphore)、读写信号量
(rw_semaphore)、spinlock、BKL(Big Kernel
Lock)、rwlock、brlock(只包含在2.4内核中)、RCU(只包含在2.6内核中)和seqlock(只包含在2.6内核中)。
  二、原子操作
  所谓原子操作,就是该操作绝不会在执行完毕前被所有其他任务或事件打断,也就说,他的最小的执行单位,不可能有比他更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。
  原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,他们都使用汇编语言实现,因为C语言并不能实现这样的操作。
  原子操作主要用于实现资源计数,非常多引用计数(refcnt)就是通过原子操作实现的。原子类型定义如下:
typedef struct
{
volatile int counter;
}
atomic_t;
  volatile修饰字段告诉gcc不要对该类型的数据做优化处理,对他的访问都是对内存的访问,而不是对寄存器的访问。
  原子操作API包括:
atomic_read(atomic_t * v);
  该函数对原子类型的变量进行原子读操作,他返回原子类型的变量v的值。
atomic_set(atomic_t * v, int i);
  该函数设置原子类型的变量v的值为i。
void atomic_add(int i, atomic_t *v);
  该函数给原子类型的变量v增加值i。
atomic_sub(int i, atomic_t *v);
  该函数从原子类型的变量v中减去i。
int atomic_sub_and_test(int i, atomic_t *v);
  该函数从原子类型的变量v中减去i,并判断结果是否为0,如果为0,返回真,否则返回假。
void atomic_inc(atomic_t *v);
  该函数对原子类型变量v原子地增加1。
void atomic_dec(atomic_t *v);
  该函数对原子类型的变量v原子地减1。
int atomic_dec_and_test(atomic_t *v);
  该函数对原子类型的变量v原子地减1,并判�


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

Linux diff与patch的深入分析

Linux diff与patch的深入分析
http://blog.csdn.net/vrix/archive/2009/08/25/4483906.aspx
diff的输出格式分为传统格式和统一格式
1)diff的传统格式输出.
############################################
cat before.txt
输出:
This is a line to be deleted
This is a line that will be changed
This is a line ......

linux引导过程内幕


Linux 引导过程内幕
 
 
引导 Linux® 系统的过程包括很多阶段。不管您是引导一个标准的 x86 桌面系统,还是引导一台嵌入式的 PowerPC® 机器,很多流程都惊人地相似。本文将探索 Linux 的引导过程,从最初的引导到启动第一个用户空间应用程序。在本文介绍的过程中,您将学习到各种与引导有关的主题, ......

Linux C notes (BOOK UNIX)

Chapter 1: Thread
① thread functions
1. pthread_self();
2. thread existing
    you can get the value of rval_ptr just by  pthread_join(pthread_t tht, void ** rval_ptr)
    cancel a thread as the thread exits with PTHREAD_CANCELED in pthread_exit, this functio ......

linux下安装java jdk及环境变量配置

JDK版本:jdk1.6.0_17
a. 下载安装包jdk-6u17-linux-i586-rpm.bin
b. cp jdk-6u17-linux-i586-rpm.bin /usr/local/
c. chmod a+x jdk-6u17-linux-i586-rpm.bin
d. sh jdk-6u17-linux-i586-rpm.bin  接受协议yes,安装完成
e. 设置环境变量
vi /etc/profile
加入下面内容:
#set java environment
JAVA_HOME=/ ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号