我在CentOS7中用gcc编译这个代码main.c:
#include <pthread.h> void* mystart(void* arg) { pthread_yield(); return(0); } int main(void) { pthread_t pid; pthread_create(&pid, 0, mystart, 0); return(0); }
第一次编译: gcc -Wall -g main.c -pthread -o a.out
没关系。
第二次编译: gcc -Wall -g main.c -lpthread -o a.out
给
警告:函数的隐式声明'pthread_yield'[-Wimplicit-function-declaration]
a.out
仍然可以正确运行? -pthread
? sched_yield
是另一种产生pthread的方法吗? 您应该使用-pthread
进行编译和链接。 它不仅链接库,还设置预处理器定义,有时选择不同的运行时库(例如在Windows上)。
pthread_yield()
是一个通常由定义启用的非标准函数
#define _GNU_SOURCE
虽然你应该使用-pthread
进行编译,但是我希望你能得到和两个编译相同的警告(除非-pthread
定义了_GNU_SOURCE
,可能就是这种情况)。
正确的解决方法是不使用非标准函数pthread_yield()
,而是使用POSIX函数sched_yield()
而不是使用#include <sched.h>
。