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