2

我正在尝试在 C 中并行化算法。我想使用pthread_barrier_t但我的 Ubuntu wsl 由于某种原因找不到它。我已经pthread.h包含了,我可以使用其余的 pthread 函数。libthread.a已安装。

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

/* Error occurs here */
pthread_barrier_t barrier;

确切的错误是:“标识符 pthread_barrier_t 未定义”

我在其他地方看到它可能是我正在编译的方式。

编译如下:

gcc -o test test.c -Wall -std=c99 -lpthread -lm

此外,VS Code 无法识别该功能。

4

1 回答 1

5

问题是你的-std=c99选择。使用严格的 C 模式会禁用一堆东西,包括pthread_barrier_t无法定义的东西。如果你改用-std=gnu99它,它应该编译。(在 WSL 上的 Ubuntu 16.04 上测试)。

或者,添加

#define _XOPEN_SOURCE 600 /* Or higher */

或者

#define _POSIX_C_SOURCE 200112L /* Or higher */

#include在您的源代码中的第一个之前。有关man 7 feature_test_macros这些宏的可接受值和更多信息,请参阅 。

于 2020-05-07T01:05:13.387 回答