前の記事 の続き
traverse
実際にlinked list をたどっていくときに marking されたnode は当然先にすすめないようにするのだが
- node が取得後に marking されそしてpurge されて先にすすめなくなる
という現象がおきる。取得後にmarking されてしまう場合はmarking が
- 開放されるまで待つ
- marking を越えてmarking されないまでたどっていく
となるが
前者は開放されると確実にpurge された捨て子のnode にいく。後者も たどっているうちにpurge されて捨て子node にいく。
とりあえずは捨て子ノードにいってしまうというのを許容する使い方でもなんとかなるかなとは思うが優しくはない。
それでも避けたい場合は, linked list を lock ないといけない場合はlist 全体をlock しないといけないが、insert/delete 自体がconcurrent になれば insert/delete 時の完了するまで(safety になるまで)lock するという使い方が現実的かもしれない。そのときに 全node にlock があるのがメモリをきにしないのであれば。
いちよ今回つくったものは, list_encabezado においている。
ということで最後に node lock も実装した。