4

スナップショットの読み取りは、leveldb の完全にスレッドセーフな操作ですか?

具体的には、あるスレッドが leveldb データベースのスナップショットを読み取り、別のスレッドが同じデータベースで読み取り/書き込みを行っているのはスレッドセーフですか? また、別のスレッドが同時にデータベースを閉じたり、読み取り中にスナップショットを削除したりする可能性があるのはどうですか?

4

1 に答える 1

6

ドキュメントによると:

データベースは、一度に 1 つのプロセスによってのみ開くことができます。leveldb の実装は、オペレーティング システムからロックを取得して、誤用を防ぎます。1 つのプロセス内で、同じ leveldb::DB オブジェクトを複数の並行スレッドで安全に共有できます。つまり、異なるスレッドがイテレータに書き込みまたは取得したり、外部同期なしで同じデータベースで Get を呼び出したりする可能性があります (leveldb 実装は必要な同期を自動的に行います)。ただし、他のオブジェクト (Iterator や WriteBatch など) では、外部同期が必要になる場合があります。2 つのスレッドがそのようなオブジェクトを共有する場合、それらは独自のロック プロトコルを使用してそのオブジェクトへのアクセスを保護する必要があります。詳細については、パブリック ヘッダー ファイルを参照してください。

https://github.com/google/leveldb/blob/master/doc/index.md#concurrency

于 2015-04-07T20:00:04.033 に答える