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
並行スレッドで呼び出された場合はどうなりますか? 悪いことは起こりませんよね?