这是我的代码,我用以下代码编译:
gcc thread.c -lpthread
它没有打印任何错误或警告。但是当我运行它时,该程序不会打印任何内容。
平台:Ubuntu 11.10 64位gcc 4.6.1
退出状态:0
当我调试它时,我发现它按照我的预期打印hello
。
这是我的代码:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *loopPrint(void *ptr)
{
char *p = (char *)ptr;
while (1)
{
printf("%s\n", p);
}
}
void *pClock(void *ptr)
{
sleep(3);
exit(0);
}
int main()
{
pthread_t showMsg, clock;
int main_pth, wait_pth;
char *msg = "Hello";
main_pth = pthread_create(&showMsg, NULL, loopPrint, (void *)msg);
wait_pth = pthread_create(&clock, NULL, pClock, NULL);
pthread_join(main_pth, NULL);
pthread_join(wait_pth, NULL);
return 0;
}
答案 0 :(得分:4)
pthread_join(main_pth, NULL);
这是错误的,pthread_join
将pthread_t
作为参数。替换为:
pthread_join(showMsg, NULL);
(与另一个相同。)
并且检查这些呼叫的返回值,它们可以并且确实失败
顺便说一下,你在睡眠呼叫中缺少#include <unistd.h>
。
答案 1 :(得分:2)
main_pth
等是pthread_create
的错误返回,而不是线程ID。等待(“加入”)showMsg
和clock
。