我們伺服器內用leveldb存一些不是很重要的, 但是又需要(半)持久化的東西. 可是自從2016到現在, 碰見好幾次不同類型的死鎖. 直到今天, 才發現真正的原因, 那就是leveldb不支持fork. 所以在你使用leveldb的時候, 一定需要註意初始化順序: fork init leveld ...
我們伺服器內用leveldb存一些不是很重要的, 但是又需要(半)持久化的東西. 可是自從2016到現在, 碰見好幾次不同類型的死鎖. 直到今天, 才發現真正的原因, 那就是leveldb不支持fork.
所以在你使用leveldb的時候, 一定需要註意初始化順序:
- fork
- init leveldb
或者:
- init leveldb
- close leveldb
- fork
- init leveldb
總之, 不能init leveldb然後再fork, 一旦這樣做, 最後就會無限卡在leveldb::port::CondVar::Wait
.
切記切記….