【发布时间】:2011-12-05 16:44:16
【问题描述】:
假设一个进程在许多单独的线程中使用MaxMind GeoIP C API。并发呼叫GeoIP_record_by_addr 安全吗?假设这是唯一同时访问数据的进程,并且正在使用单个 GeoIP 句柄。
提前致谢!
【问题讨论】:
-
您是否在线程之间共享一个 geoip 句柄?
标签: multithreading geolocation geoip
假设一个进程在许多单独的线程中使用MaxMind GeoIP C API。并发呼叫GeoIP_record_by_addr 安全吗?假设这是唯一同时访问数据的进程,并且正在使用单个 GeoIP 句柄。
提前致谢!
【问题讨论】:
标签: multithreading geolocation geoip
根据 MaxMind 自己的文档,如果您避免使用 GEOIP_CHECK_CACHE 选项,它只是线程安全的。这意味着库不会通过 mtime 检查检查磁盘上的数据库更新。对于长期运行的应用程序,如果您需要新鲜数据,您必须:
无论 GEOIP_CHECK_CACHE 如何,另外两个次要功能也不是线程安全的:
在我的简要分析中可能遗漏了其他问题,但恕我直言,使用每个线程的 GeoIP 句柄或将对共享句柄的所有访问权限包装在您自己的互斥锁中更为实用,然后您可以使用所有功能并拥有它为您执行基于 mtime 的重新加载。
【讨论】:
我有时间研究 GeoIP API,它对数据库的处理似乎是线程安全的。预读或内存访问。
【讨论】: