假设一个进程在许多单独的线程中使用MaxMind GeoIP C API 。并发调用GeoIP_record_by_addr
安全吗?假设这是唯一同时访问数据的进程,并且正在使用单个 GeoIP 句柄。
提前致谢!
假设一个进程在许多单独的线程中使用MaxMind GeoIP C API 。并发调用GeoIP_record_by_addr
安全吗?假设这是唯一同时访问数据的进程,并且正在使用单个 GeoIP 句柄。
提前致谢!
根据 MaxMind 自己的文档,如果您避免使用 GEOIP_CHECK_CACHE 选项,它只是线程安全的。这意味着库不会通过 mtime 检查检查磁盘上的数据库更新。对于长期运行的应用程序,如果您需要新鲜数据,您必须:
无论 GEOIP_CHECK_CACHE 如何,另外两个次要功能也不是线程安全的:
在我的简短分析中我可能遗漏了其他问题,但恕我直言,使用每个线程的 GeoIP 句柄或将所有对共享句柄的访问包装在您自己的互斥锁中更为实用,然后您可以使用所有功能并让它去做为您提供基于 mtime 的重新加载。
我有时间调查 GeoIP API,看来它对数据库的处理是线程安全的。预读或内存访问。