Linux 2.6内核的新锁机制-RCU

来源:互联网 发布:c语言 mobi 编辑:程序博客网 时间:2024/06/06 00:00

http://www.ibm.com/developerworks/cn/linux/l-rcu/

 

函数摘要:
C代码
/*读者在读取由RCU保护的共享数据时使用该函数标记它进入读端临界区。*/ 
rcu_read_lock()  


/* 
该函数与rcu_read_lock配对使用,用以标记读者退出读端临界区。夹在这两个函数之间的代码区称为"读端临界区"(read-side critical section)。读端临界区可以嵌套,如图3,临界区2被嵌套在临界区1内。 
*/ 
rcu_read_unlock()  
 
/* 
该函数由RCU写端调用,它将阻塞写者,直到经过grace period后,即所有的读者已经完成读端临界区,写者才可以继续下一步操作。如果有多个RCU写端调用该函数,他们将在一个grace period之后全部被唤醒。 
*/ 
synchronize_rcu()  

/* 
函数 call_rcu 也由 RCU 写端调用,它不会使写者阻塞,因而可以在中断上下文或 softirq 使用,而synchronize_rcu、synchronize_kernel 和synchronize_shced只能在进程上下文使用。该函数将把函数 func 挂接到 RCU回调函数链上,然后立即返回。一旦所有的 CPU都已经完成端临界区操作,该函数将被调用来释放删除的将绝不在被应用的数据。参数 head 用于记录回调函数 func,一般该结构会作为被 RCU保护的数据结构的一个字段,以便省去单独为该结构分配内存的操作。需要指出的是,函数 synchronize_rcu的实现实际上使用函数call_rcu。 
*/ 
void fastcall call_rcu(struct rcu_head *head,  
                                void (*func)(struct rcu_head *rcu))  
 
/* 
写端调用,把一个指针p赋为指针v。 
*/ 
rcu_assign_pointer()  
typeof(p) rcu_assign_pointer(p, typeof(p) v);  
 
/* 
获得指针p的解引用值 
*/ 
rcu_dereference()  
typeof(p) rcu_assign_pointer(p, typeof(p) v); 

 

http://group.ednchina.com/1036/21283.aspx

http://blog.chinaunix.net/u1/51562/showart_1341707.html

http://www.360doc.com/content/10/0106/17/701200_12820595.shtml

http://blog.csdn.net/ustc_dylan/archive/2009/04/05/4049647.aspx