我用gcc在CentOS7中编译了这段代码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
没事的
第2次编译:
gcc -Wall -g main.c -lpthread -o a.out
给
警告:函数'pthread_yield'的隐式声明[-Wimplicit-function-declaration]
第二个
a.out
仍然可以正常运行吗?没有
-pthread
时如何解决警告? sched_yield
是产生pthread的另一种方法吗? 最佳答案
pthread_yield()
是非标准功能,通常通过定义启用
#define _GNU_SOURCE
虽然应该使用
-pthread
进行编译,但我希望您在两种编译中都收到相同的警告(除非-pthread
定义_GNU_SOURCE
可能是这种情况)。正确的解决方法是不使用非标准函数
pthread_yield()
,而使用POSIX函数sched_yield()
,而不要包含#include <sched.h>
。关于c - 为什么用-lpthread隐式声明pthread_yield,而用-pthread一切正常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39822375/