- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
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;
}
在这里,我不涉及任何全局变量。如果我的 getValue
在并发线程中被调用怎么办?不会有坏事发生吧?
最佳答案
是的,它是线程安全的,除非它读取语言环境。
Function: int asprintf (char **ptr, const char *template, …)
Preliminary: | MT-Safe locale | AS-Unsafe heap | AC-Unsafe mem
关于“语言环境”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"多线程安全,因为在某些情况下,事实证明它们并非如此,因此程序员需要注意这一点。
关于c - `asprintf` 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28562512/
我是一名优秀的程序员,十分优秀!