3

我在编译时不断收到这个错误,我不知道为什么。代码块是:

static int
run(int nm, int nf)
{
    int i, j;
    int err, n = nm + nf;
    pthread_t thread[n];

    for (i = 0; i < n; i++) {
        err = pthread_create(&thread[i], NULL,
                  i < nm ? male : female, &shared_bathroom);
        if (err) {
            fprintf(stderr, "%s: %s: unable to create thread %d: %d\n",
                    progname, __func__, i, err);
            return EXIT_FAILURE;
        }
    }

    for (j = 0; j < n; j++) {
        if (thread[j]) (void) pthread_join(thread[j], NULL);
    }

    return EXIT_SUCCESS;
}

错误出现在第二个 for 循环下的 if 语句行。具体来说,我认为它指的是(thread[j]).

4

2 回答 2

7

该表达式thread[j]返回 struct 的一个实例pthread_t,您不能在布尔上下文中使用它(例如,在if语句的上下文中)。无论如何,您没有理由需要该if声明。说啊:

for (j = 0; j < n; j++) {
    pthread_join(thread[j], NULL);
}
于 2013-04-24T20:37:24.327 回答
0

您不能在 if 条件中直接使用该值。你可以做两件事,或者你可以像这样使用 if (thread[j] != NULL_PTR) 或者你可以使用检查结构内部的显式变量来检查值。

于 2015-06-16T12:01:17.320 回答