未知类型名称“pthread_barrier_t”

Dan*_*ell 6 c pthreads pthread-barriers windows-subsystem-for-linux

我正在尝试用 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;
Run Code Online (Sandbox Code Playgroud)

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

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

编译如下:

gcc -o test test.c -Wall -std=c99 -lpthread -lm
Run Code Online (Sandbox Code Playgroud)

另外,VS Code 无法识别该函数。

Sha*_*awn 7

问题在于你的-std=c99选择。使用严格的 C 模式会禁用很多东西,包括阻止pthread_barrier_t定义的东西。如果你使用-std=gnu99它,它应该可以编译。(在 WSL 上的 Ubuntu 16.04 上测试)。

或者,添加

#define _XOPEN_SOURCE 600 /* Or higher */
Run Code Online (Sandbox Code Playgroud)

或者

#define _POSIX_C_SOURCE 200112L /* Or higher */
Run Code Online (Sandbox Code Playgroud)

#include在源中的第一个之前。请参阅man 7 feature_test_macros参考资料 获取这些宏的可接受值和更多信息。