我在具有多個線程但只有一個進程的環境中對事務使用Berkeley數據庫。Berkeley DB:在不讀取記錄的情況下鎖定記錄
因爲我只有一個進程,所以我想緩存來自某些記錄的數據的解析表示,以便我不必每次訪問時都不必要地重新解析它,但是如果我執行如果在訪問緩存數據時沒有發出任何數據庫操作,我會明顯不遵守鎖定協議,導致事務不能相互隔離。
我明顯可以通過在我打算在事務中使用的記錄上運行get
操作來解決這個問題,但這在I/O方面似乎沒有必要,而且也很醜陋,因爲我實際上並不需要重新編譯,讀取數據。有沒有辦法鎖定「好像」我已發出get
操作?
同樣,有沒有辦法做到相應的寫鎖put
操作,因爲我需要修改的緩存數據(這需要以串行的數據實際上put
它之前完成的)之前做呢?