gpt4 book ai didi

c - `asprintf` 是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 17:21:17 25 4
gpt4 key购买 nike

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 在并发线程中被调用怎么办?不会有坏事发生吧?

最佳答案

是的,它是线程安全的,除非它读取语言环境。

asprintf

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com