繁体   English   中英

JSON C库是线程安全的吗?

[英]Is the JSON C library thread-safe?

我在Ubuntu( json-c / json.h )下使用C JSON库。 我需要解析多个POSIX线程上的JSON字符串。 我目前正在使用json_tokener_parse()方法 - 这是多线程安全还是我需要使用其他东西?

日Thnx

我查看了代码: https//github.com/json-c/json-c/blob/master/json_tokener.c

它似乎是线程安全的,但有一个例外:

#ifdef HAVE_SETLOCALE
  char *oldlocale=NULL, *tmplocale;

  tmplocale = setlocale(LC_NUMERIC, NULL);
  if (tmplocale) oldlocale = strdup(tmplocale);
  setlocale(LC_NUMERIC, "C");
#endif

因此,如果定义了HAVE_SETLOCALE (并且它可能是),则将调用setlocale()并将进程范围的LC_NUMERIC"C" 当然,它最终会解除这个问题。 如果您的LC_NUMERIC在开头不是"C"或兼容的语言环境,这将导致问题,因为一个线程将“恢复”您的语言环境,而另一个线程可能仍在解析并期望"C"语言环境生效。

幸运的是,保证程序启动时语言环境将是"C" ,因此您只需要确保您或您正在使用的任何其他库都没有将LC_NUMERIC (或当然是LC_ALL )设置为与"C"不兼容的语言环境。 然后,如果需要,可以使用HAVE_SETLOCALE定义库,但这可能无关紧要,因为它对setlocale()调用没有实际效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM