プロセスが多くの別々のスレッドで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チェックを介してディスク上のデータベース更新をチェックしません。長時間実行中のアプリケーションのために、あなたが新鮮なデータが必要な場合は、どちらかにあります:
> NetmaskをGeoIPハンドル自体に追加するので、共有ハンドルのネットマスクは、同じスレッドからの「最新の」ルックアップに対して常に正しい値を与えるとは限りません。
私は私の簡単な分析で他の問題を逃したが、私見それはスレッドごとののGeoIPハンドルを使用するか、または独自のミューテックスで共有ハンドルへのすべてのアクセスをラップのいずれかに、より実用的だし、あなたはすべてを使用することができますすることができあなたのためにmtimeベースのリロードを行うことができます。
私はGeoIP APIを調査する時間があり、データベースの処理はスレッドセーフであるようです。プリアイドまたはメモリアクセス。
スレッド間で1つのジオープハンドルを共有していますか? – pilcrow
はい。それを反映するように編集されました。 – Sam