всплывающие блокировки или не потокобезопасны?

StackOverflow https://stackoverflow.com/questions/1702442

  •  19-09-2019
  •  | 
  •  

Вопрос

Я видел несколько реализаций 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;

Это то, на что это похоже - не потокобезопасная реализация?Или я упускаю что-то очевидное?

Это было полезно?

Решение

В Реализация GNU libc является потокобезопасным, если libc настроен на повторный вход (что вполне вероятно).Однако это может быть не так для других реализаций libc.

Другие советы

Я не думаю, что вы упускаете что-то очевидное.Я не вижу никаких ссылок на потокобезопасность с popen(), либо требующих, чтобы она была потокобезопасной, либо нет.В результате вам, вероятно, следует рассматривать его как не потокобезопасный.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top