*参照元 [#lfdbe9d7] #backlinks *説明 [#yc8eadef] -パス: [[linux-2.6.33/include/linux/rcupdate.h]] -FIXME: これは何? --説明 **引数 [#l244819b] -なし **返り値 [#k087571f] -なし **参考 [#pa7408de] *実装 [#odbf3fc2] /** * rcu_read_lock - mark the beginning of an RCU read-side critical section. * * When synchronize_rcu() is invoked on one CPU while other CPUs * are within RCU read-side critical sections, then the * synchronize_rcu() is guaranteed to block until after all the other * CPUs exit their critical sections. Similarly, if call_rcu() is invoked * on one CPU while other CPUs are within RCU read-side critical * sections, invocation of the corresponding RCU callback is deferred * until after the all the other CPUs exit their critical sections. * * Note, however, that RCU callbacks are permitted to run concurrently * with RCU read-side critical sections. One way that this can happen * is via the following sequence of events: (1) CPU 0 enters an RCU * read-side critical section, (2) CPU 1 invokes call_rcu() to register * an RCU callback, (3) CPU 0 exits the RCU read-side critical section, * (4) CPU 2 enters a RCU read-side critical section, (5) the RCU * callback is invoked. This is legal, because the RCU read-side critical * section that was running concurrently with the call_rcu() (and which * therefore might be referencing something that the corresponding RCU * callback would free up) has completed before the corresponding * RCU callback is invoked. * * RCU read-side critical sections may be nested. Any deferred actions * will be deferred until the outermost RCU read-side critical section * completes. * * It is illegal to block while in an RCU read-side critical section. */ static inline void rcu_read_lock(void) { __rcu_read_lock(); - --[[linux-2.6.33/__rcu_read_lock()]] __acquire(RCU); - --[[linux-2.6.33/__acquire()]] rcu_read_acquire(); - --[[linux-2.6.33/rcu_read_acquire()]] } *コメント [#j6763a27]