#include <stdio.h>
#include "mythreads.h"
#include <stdlib.h>
#include <pthread.h>
void *
mythread(void *arg) {
printf("%s\n", (char *) arg);
return NULL;
}
int
main(int argc, char *argv[])
{
if (argc != 1) {
fprintf(stderr, "usage: main\n");
exit(1);
}
pthread_t p1, p2;
printf("main: begin\n");
Pthread_create(&p1, NULL, mythread, "A");
Pthread_create(&p2, NULL, mythread, "B");
// join waits for the threads to finish
//Pthread_join(p1, NULL);
//Pthread_join(p2, NULL);
printf("main: end\n");
return 0;
}
这是一个来自Remzi的代码第27章玩耍,我很想知道为什么有时在运行时,我会打印两次。我知道为什么会发生这种情况,因为我没有包含联合声明。为什么要跳过连接造成这种情况?当pthread_join被注释时会发生什么?
我的输出:
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
A
main: end
B
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
A
main: end
B
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
main: end
A
[email protected]:~/OS/Code-Threads-Intro$ ./a.out
main: begin
main: end
B
A
A
请修正您的代码中的编译器错误,并删除对非提供的“mythreads.h”头的依赖。 – o11c
大写的函数名称是否覆盖函数名称的所有小写版本的函数,除非它们执行某种错误处理并可能报告?就目前而言,只有熟悉“mythreads.h”标题和图书/课程资料的人才能够提供帮助。我们可以做出(或多或少)受过教育的猜测,但我们不喜欢猜测。 –
可能重复[pthread:一个printf语句在子线程中打印两次](http://stackoverflow.com/questions/13550662/pthread-one-printf-statement-get-printed-twice-in-child-thread) –