6

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

4

2 に答える 2

2

glibcフリー ソフトウェアであり、おそらく を実装している唯一の (または最も重要な) ライブラリasprintfです。

そのため、そのソース コードを研究する (さらには改善に貢献する) ことができます。そのstdio-common/asprintf.c & libio/vasprintf.cソース ファイルを参照してください。

確かに、スレッドセーフな方法mallocと関連するもので呼び出しているようです。

于 2015-02-17T13:27:36.607 に答える