假設進程在許多單獨的線程中使用MaxMind GeoIP C API。併發呼叫GeoIP_record_by_addr
安全嗎?假設這是同時訪問數據的唯一過程,並且正在使用單個GeoIP句柄。MaxMind的GeoIP C實現線程安全嗎?
在此先感謝!
假設進程在許多單獨的線程中使用MaxMind GeoIP C API。併發呼叫GeoIP_record_by_addr
安全嗎?假設這是同時訪問數據的唯一過程,並且正在使用單個GeoIP句柄。MaxMind的GeoIP C實現線程安全嗎?
在此先感謝!
根據MaxMind自己的文檔,只有在避免使用GEOIP_CHECK_CACHE選項時纔是線程安全的。這意味着庫不會通過mtime檢查來檢查磁盤上的數據庫更新。對於長時間運行的應用程序,如果你想新的數據你就必須要麼:
兩個小功能也不是線程安全的,無論GEOIP_CHECK_CACHE的:
我可能會錯過其他的問題,我簡要的分析,但恕我直言,這是更加務實要麼使用GeoIP的手柄每個線程或包裹在自己的互斥鎖的所有訪問共享手柄,然後你可以使用所有功能,並讓它爲您執行基於mtime的重新加載。
我有時間調查GeoIP API,看起來它對數據庫的處理是線程安全的。預讀或內存訪問。
您是否在線程之間共享單個geoip句柄? – pilcrow
是的。編輯以反映這一點。 – Sam