关于线程问题。急。期中的作业。
老师们请教您一些关于线程的程序。
代码:
#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行为什么又只输出这么点
希望忙忙小弟。初学者,请见谅!谢谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
哥们儿,好眼力啊。 OSC要成作业FAQ基地了。
现在的孩子都肿么了
都肿了呗
不是因为时间到了 而是被处理器中断了 而你的代码中没有线程保护 所以你看到的结果是这样的 关于你的结果 你可以尝试去掉循环 进行单次打印 你就会知道为什么了
那为什么第一行的调试时间跟第二行的时间不一样。第一行的结束是因为调试时间到了是吗?
原因为操作系统的调度造成的,在操作系统中不是并行执行程序而是通过一个很短的时间间隔来调度 所以出现了这种现象 要保证数据达到预期应保证线程的原子性