popen()/ pclose()の実装を見てきました。それらはすべてpidの静的リストを使用し、ロックは使用しませんでした。
static int *pids;
static int fds;
if (!pids) {
if ((fds = getdtablesize()) <= 0)
return (NULL);
if ((pids = malloc(fds * sizeof(int))) == NULL)
return (NULL);
memset(pids, 0, fds * sizeof(int));
}
またはこれ、おそらくNetBSD:
static struct pid {
struct pid *next;
FILE *fp;
pid_t pid;
} *pidlist;
/* Link into list of file descriptors. */
cur->fp = iop;
cur->pid = pid;
cur->next = pidlist;
pidlist = cur;
それはどのように見えるか-スレッドセーフではない実装ですか?それとも私は明らかな何かを見逃していますか?