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

发布于 2021-11-11 23:20:42 字数 1774 浏览 963 评论 6

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

代码:

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

屌丝范 2021-11-18 07:43:34

哥们儿,好眼力啊。 OSC要成作业FAQ基地了。

清风夜微凉 2021-11-18 07:38:12

现在的孩子都肿么了

陌若浮生 2021-11-18 07:21:04

都肿了呗

回眸一笑 2021-11-17 23:26:05

不是因为时间到了 而是被处理器中断了 而你的代码中没有线程保护 所以你看到的结果是这样的 关于你的结果 你可以尝试去掉循环 进行单次打印 你就会知道为什么了

筱武穆 2021-11-17 12:00:11

那为什么第一行的调试时间跟第二行的时间不一样。第一行的结束是因为调试时间到了是吗?

把回忆走一遍 2021-11-14 12:27:50

原因为操作系统的调度造成的,在操作系统中不是并行执行程序而是通过一个很短的时间间隔来调度 所以出现了这种现象 要保证数据达到预期应保证线程的原子性

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文