リーダーライターロックとの比較とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > ウィキペディア小見出し辞書 > リーダーライターロックとの比較の意味・解説 

リーダー・ライターロックとの比較

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/01/13 15:24 UTC 版)

リード・コピー・アップデート」の記事における「リーダー・ライターロックとの比較」の解説

RCUいろいろな使い方があるが、一般的な使い方はリーダー・ライターロックに近い。以下のふたつのコードはリーダー・ライターロック(左側)とRCU(右側)を同じ処理で使ったのである。 1 struct el { 1 struct el { 2 struct list_head lp; 2 struct list_head lp; 3 long key; 3 long key; 4 spinlock_t mutex; 4 spinlock_t mutex; 5 int data; 5 int data; 6 /* Other data fields */ 6 /* Other data fields */ 7 }; 7 }; 8 DEFINE_RWLOCK(listmutex); 8 DEFINE_SPINLOCK(listmutex); 9 LIST_HEAD(head); 9 LIST_HEAD(head); 1 int search(long key, int *result) 1 int search(long key, int *result) 2 { 2 { 3 struct el *p; 3 struct el *p; 4 4 5 read_lock(&listmutex); 5 rcu_read_lock(); 6 list_for_each_entry(p, &head, lp) { 6 list_for_each_entry_rcu(p, &head, lp) { 7 if (p->key == key) { 7 if (p->key == key) { 8 *result = p->data; 8 *result = p->data; 9 read_unlock(&listmutex); 9 rcu_read_unlock();10 return 1; 10 return 1;11 } 11 }12 } 12 }13 read_unlock(&listmutex); 13 rcu_read_unlock();14 return 0; 14 return 0;15 } 15 } 1 int delete(long key) 1 int delete(long key) 2 { 2 { 3 struct el *p; 3 struct el *p; 4 4 5 write_lock(&listmutex); 5 spin_lock(&listmutex); 6 list_for_each_entry(p, &head, lp) { 6 list_for_each_entry(p, &head, lp) { 7 if (p->key == key) { 7 if (p->key == key) { 8 list_del(&p->lp); 8 list_del_rcu(&p->lp); 9 write_unlock(&listmutex); 9 spin_unlock(&listmutex); 10 synchronize_rcu();10 kfree(p); 11 kfree(p);11 return 1; 12 return 1;12 } 13 }13 } 14 }14 write_unlock(&listmutex); 15 spin_unlock(&listmutex);15 return 0; 16 return 0;16 } 17 } 両者の違いは非常に小さい。参照側のロックは rcu_read_lock() と rcu_read_unlock() になり、更新側のロックはリーダー・ライターロックから単純なスピンロック変更され、kfree()実行するまえに synchronize_rcu()呼び出される。 しかし、この場合参照側と更新側が同時に動作する可能性出てくる。多く場合はこれは問題とはならないが、使われ方を十分注意する必要がある。たとえば、複数独立したリストアトミック更新しなければならない場合、これをRCU置き換えるには注意が必要である。 synchronize_rcu() があるということはRCUでは delete()ブロックされる可能性があることを示す。それが問題となる場合代わりに call_rcu() を call_rcu (kfree, p) のように使用すればよい。これは参照カウント組合わせる場合に特に便利である。

※この「リーダー・ライターロックとの比較」の解説は、「リード・コピー・アップデート」の解説の一部です。
「リーダー・ライターロックとの比較」を含む「リード・コピー・アップデート」の記事については、「リード・コピー・アップデート」の概要を参照ください。

ウィキペディア小見出し辞書の「リーダーライターロックとの比較」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「リーダーライターロックとの比較」の関連用語

リーダーライターロックとの比較のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



リーダーライターロックとの比較のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのリード・コピー・アップデート (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS