GNU函数asprintf(打印到分配的字符串)线程安全吗?
(IIC,基本上,这归结为malloc是否是线程安全的问题.)
考虑示例代码:
#define _GNU_SOURCE #include <stdio.h> #include "getValue.h" char * getValue(int key) { char * value; asprintf(&value,"%d",key); // TODO: No error handling! // If memory allocation wasn't possible,or some other error occurs,these functions will // return -1,and the contents of strp is undefined. return value; }
解决方法
是的,它是线程安全的,除非它读取区域设置.
Function: int asprintf (char **ptr,const char *template,…)
Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem
关于’locale’exception,特别是:
Functions annotated with locale as an MT-Safety issue read from the locale object without any form of synchronization. Functions annotated with locale called concurrently with locale changes may behave in ways that do not correspond to any of the locales active during their execution,but an unpredictable mix thereof.
这些类型的函数被称为“conditionally”多线程安全,因为在某些情况下,它们结果并非如此,因此程序员需要处理这些问题.