SlideShare a Scribd company logo
1 of 58
Lockfree List
Lockfree List って? ,[object Object],[object Object]
挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える
挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える CAS
挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える 成功
挿入処理 A B C D CAS を使う事によって、同一の場所に同時に複数の挿入が発生しても CAS E CAS
挿入処理 A B C D 片方が必ず失敗する 失敗 E 成功
挿入処理 A B C D 失敗したらもう一度接続先を改めてやりなおす E 失敗したのでやりなおし
挿入処理 A B C D 失敗したらもう一度接続先を改めてやりなおす E CAS
挿入処理 A B C D これで直列化できる E 成功
削除処理 A B C 挿入処理と同様に、ポインタを CAS で繋ぎ変える 削除
削除処理 A B C 挿入処理と同様に、ポインタを CAS で繋ぎ変える CAS
削除処理 A C B こうして追い出した後に B を delete - CASのおかげで、複数のスレッドが一つのノードを取り合っても複数回deleteせずに済む delete
削除処理 A C こうして追い出した後に B を delete - CASのおかげで、複数のスレッドが一つのノードを取り合っても複数回deleteせずに済む
しかし問題が ,[object Object],A B C D 削除 削除
しかし問題が ,[object Object],A B C D CAS CAS
しかし問題が ,[object Object],[object Object],A B C D delete delete
しかし問題が ,[object Object],[object Object],[object Object],A D
しかし問題が ,[object Object],A B C D E 削除 挿入
しかし問題が ,[object Object],A B C D E CAS CAS
しかし問題が ,[object Object],[object Object],A B C D E delete
しかし問題が ,[object Object],[object Object],[object Object],A C D E
そこで削除を2段階操作とする ,[object Object],[object Object],[object Object],[object Object]
そうなると? A B C D α :ここまでイタレーションし削除マーキング
そうなると? A B C D α :そして CAS による削除を試みる CAS
そうなると? A B C D α :成功したなら良し
そうなると? ,[object Object],[object Object],A B C D α :ここまでイタレーションし削除マーキング β :ここまでイタレーションし削除マーキング
そうなると? ,[object Object],[object Object],A B C D α : CAS を試みる β : CAS を試みる
そうなると? ,[object Object],[object Object],A B C D α : B のポインタがマーキングされているので CAS に失敗する β : A のポインタは変わらないので CAS に成功する
そうなると? ,[object Object],[object Object],A C D α :リストの先頭からイタレーションし直す
そうなると? ,[object Object],[object Object],A C D α :削除マークを発見
そうなると? ,[object Object],[object Object],A C D α : CAS を試みる
そうなると? ,[object Object],[object Object],[object Object],A C D α : CAS 成功
そうなると? ,[object Object],[object Object],[object Object],A D
そうなると? ,[object Object],A B C D E 削除 挿入
そうなると? ,[object Object],A B C D E α :削除マーキング β : CAS を試みる
そうなると? ,[object Object],A B C D E α :削除マーキング β :マークのせいで CAS 失敗
そうなると? ,[object Object],A B C D E α : CAS を試みる
そうなると? ,[object Object],A B C D E α : CAS 成功 β :リストの頭から再びイタレート
そうなると? ,[object Object],A C D E β :リストの頭から再びイタレート
そうなると? ,[object Object],A C D E β : CAS を試みる
そうなると? ,[object Object],[object Object],A C D E β : CAS 成功
ポイント ,[object Object],[object Object],[object Object],[object Object]
問題点 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
話題 ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
ABA問題って? A B C D α :ここまでイタレーションし削除マーキング
ABA問題って? A B C D α :そのまましばらく休眠
ABA問題って? A B C D α :そのまましばらく休眠 β :別の用事でイタレーションしてくる
ABA問題って? A B C D α :そのまましばらく休眠 β :マークを確認したので削除
ABA問題って? A B C D α :そのまましばらく休眠 β :マークを確認したので削除
ABA問題って? A B C D α :そのまましばらく休眠 γ : B の後に新規ノード X を挿入する
ABA問題って? A B X D α :そのまましばらく休眠 γ :挿入時に運悪く α が参照中のノードを使いまわしてしまう
ABA問題って? A B X D α :やっと目覚める
ABA問題って? A B X D α : C の削除を再開する
ABA問題って? A B X D α : CAS を発行 CAS C が保存されていた時と同じポインタを指してしまっている
ABA問題って? A B X D α :アドレスが一致しているので CAS 成功 削除する気の無かった X が削除されてしまう
ABA問題って? ,[object Object],[object Object],[object Object]
ABA問題って? ,[object Object],[object Object],[object Object],[object Object],[object Object]

More Related Content

What's hot

What's hot (20)

分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
トランザクションの並行処理制御
トランザクションの並行処理制御トランザクションの並行処理制御
トランザクションの並行処理制御
 
並行実行制御の最適化手法
並行実行制御の最適化手法並行実行制御の最適化手法
並行実行制御の最適化手法
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 
自動定理証明の紹介
自動定理証明の紹介自動定理証明の紹介
自動定理証明の紹介
 
トランザクションの設計と進化
トランザクションの設計と進化トランザクションの設計と進化
トランザクションの設計と進化
 
Re永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライドRe永続データ構造が分からない人のためのスライド
Re永続データ構造が分からない人のためのスライド
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
不揮発性メモリ(PMEM)を利用したストレージエンジンの話 #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ
不揮発性メモリ(PMEM)を利用したストレージエンジンの話  #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ不揮発性メモリ(PMEM)を利用したストレージエンジンの話  #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ
不揮発性メモリ(PMEM)を利用したストレージエンジンの話 #mysql_jp #myna会 #yahoo #mysql #pmem #不揮発性メモリ
 
これから Haskell を書くにあたって
これから Haskell を書くにあたってこれから Haskell を書くにあたって
これから Haskell を書くにあたって
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法トランザクションをSerializableにする4つの方法
トランザクションをSerializableにする4つの方法
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
ダブリング
ダブリングダブリング
ダブリング
 
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
MCC CTF講習会 pwn編
MCC CTF講習会 pwn編MCC CTF講習会 pwn編
MCC CTF講習会 pwn編
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 

More from Kumazaki Hiroki

What is jubatus? How it works for you?
What is jubatus? How it works for you?What is jubatus? How it works for you?
What is jubatus? How it works for you?
Kumazaki Hiroki
 

More from Kumazaki Hiroki (12)

An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介An overview of query optimization in relational systems 論文紹介
An overview of query optimization in relational systems 論文紹介
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
トランザクション入門
トランザクション入門 トランザクション入門
トランザクション入門
 
地理分散DBについて
地理分散DBについて地理分散DBについて
地理分散DBについて
 
Cache obliviousの話
Cache obliviousの話Cache obliviousの話
Cache obliviousの話
 
Jubatus hackathon2
Jubatus hackathon2Jubatus hackathon2
Jubatus hackathon2
 
What is jubatus (short)
What is jubatus (short)What is jubatus (short)
What is jubatus (short)
 
What is jubatus? How it works for you?
What is jubatus? How it works for you?What is jubatus? How it works for you?
What is jubatus? How it works for you?
 
MerDy
MerDyMerDy
MerDy
 
Bloom filter
Bloom filterBloom filter
Bloom filter
 
SkipGraph
SkipGraphSkipGraph
SkipGraph
 
Lockfree Priority Queue
Lockfree Priority QueueLockfree Priority Queue
Lockfree Priority Queue
 

Lockfree list

  • 2.
  • 3. 挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える
  • 4. 挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える CAS
  • 5. 挿入処理 A B C D リストの繋ぎ替え処理が一瞬で片付くように工夫して、検索処理の邪魔をしない CompareAndSwap( 以下 CAS) でポインタを差し替える 成功
  • 6. 挿入処理 A B C D CAS を使う事によって、同一の場所に同時に複数の挿入が発生しても CAS E CAS
  • 7. 挿入処理 A B C D 片方が必ず失敗する 失敗 E 成功
  • 8. 挿入処理 A B C D 失敗したらもう一度接続先を改めてやりなおす E 失敗したのでやりなおし
  • 9. 挿入処理 A B C D 失敗したらもう一度接続先を改めてやりなおす E CAS
  • 10. 挿入処理 A B C D これで直列化できる E 成功
  • 11. 削除処理 A B C 挿入処理と同様に、ポインタを CAS で繋ぎ変える 削除
  • 12. 削除処理 A B C 挿入処理と同様に、ポインタを CAS で繋ぎ変える CAS
  • 13. 削除処理 A C B こうして追い出した後に B を delete - CASのおかげで、複数のスレッドが一つのノードを取り合っても複数回deleteせずに済む delete
  • 14. 削除処理 A C こうして追い出した後に B を delete - CASのおかげで、複数のスレッドが一つのノードを取り合っても複数回deleteせずに済む
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24. そうなると? A B C D α :ここまでイタレーションし削除マーキング
  • 25. そうなると? A B C D α :そして CAS による削除を試みる CAS
  • 26. そうなると? A B C D α :成功したなら良し
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46. ABA問題って? A B C D α :ここまでイタレーションし削除マーキング
  • 47. ABA問題って? A B C D α :そのまましばらく休眠
  • 48. ABA問題って? A B C D α :そのまましばらく休眠 β :別の用事でイタレーションしてくる
  • 49. ABA問題って? A B C D α :そのまましばらく休眠 β :マークを確認したので削除
  • 50. ABA問題って? A B C D α :そのまましばらく休眠 β :マークを確認したので削除
  • 51. ABA問題って? A B C D α :そのまましばらく休眠 γ : B の後に新規ノード X を挿入する
  • 52. ABA問題って? A B X D α :そのまましばらく休眠 γ :挿入時に運悪く α が参照中のノードを使いまわしてしまう
  • 53. ABA問題って? A B X D α :やっと目覚める
  • 54. ABA問題って? A B X D α : C の削除を再開する
  • 55. ABA問題って? A B X D α : CAS を発行 CAS C が保存されていた時と同じポインタを指してしまっている
  • 56. ABA問題って? A B X D α :アドレスが一致しているので CAS 成功 削除する気の無かった X が削除されてしまう
  • 57.
  • 58.