关于线程问题。急。期中的作业。

海子IT 发布于 2012/03/22 09:41
阅读 420
收藏 0

老师们请教您一些关于线程的程序。

代码:

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
// repeat the times (*) operation 100,000 times to slow down the
// execution of the instructions
#define RPT 100000
void* print_X() {
int i;
float x;
while (1) {
// consuming some CPU time to slow done the execution
// no logic meaning; can be safely ignored
for(i=0; i<RPT; i++) { x = 3.1415926*3.1415926; }
printf("X");
}
}
void* print_O() {
int i;
float x;
while (1) {
for(i=0; i<RPT; i++) { x = 3.1415926*3.1415926; }
printf("O");
}
}
int main () {
pthread_t tid1, tid2;
pthread_create (&tid1, NULL, &print_X, NULL);
pthread_create (&tid2, NULL, &print_O, NULL);
// Wait till threads complete. Not really related to this
// question in this assignment. Can be ignored.
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
printf ("\n==========================\n");
}

 

输出:

01: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
02: OOOOOOOOOOOOOO
03: XXXXXXXXXXXXXXXXXXX
04: OOOOOOOOOOOOOOOOOOO
05: XXXXXXXXXXXXXXXXXX
06: OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
07: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
08: XXX
09: O
10: X
11: O
12: X
13: O
14: X
15: O
16: XXXXXXXXXXXXXXXXXXXXXXXXX
17: OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
18: XXXXXXXXXXXXXXXXXXXXXXX
19: OOOOOOOOOOOOOOOOOOOOOOOO

 

我对这输入很不明白。

1为什么第一行执行60个X输出后停止,转到输出第二行呢?

2为什么第二行输出不是跟第一行的X次数一样

3在输出第一行跟第二行之前的背后有什么活动是我们看不到的

4第8到第15行为什么又只输出这么点

希望忙忙小弟。初学者,请见谅!谢谢!

加载中
0
foxhackd
foxhackd
原因为操作系统的调度造成的,在操作系统中不是并行执行程序而是通过一个很短的时间间隔来调度 所以出现了这种现象 要保证数据达到预期应保证线程的原子性
海子IT
那为什么第一行的调试时间跟第二行的时间不一样。第一行的结束是因为调试时间到了是吗?
0
foxhackd
foxhackd
不是因为时间到了 而是被处理器中断了 而你的代码中没有线程保护 所以你看到的结果是这样的 关于你的结果 你可以尝试去掉循环 进行单次打印 你就会知道为什么了
0
Yisen
Yisen

@clverjaem

我说怎么这么眼熟

你跟他是同学吧?- -

汉克斯
汉克斯
@yisen : 都肿了呗
Yisen
Yisen
@汉克斯 : 现在的孩子都肿么了
汉克斯
汉克斯
哥们儿,好眼力啊。 OSC要成作业FAQ基地了。
返回顶部
顶部