gpt4 book ai didi

c - 关于并行 POSIX 线程

转载 作者:太空狗 更新时间:2023-10-29 15:19:53 28 4
gpt4 key购买 nike

我想创建两个线程,它们看起来应该是这样的:

P1:

while(1) {
printf("1");
printf("2");
printf("3");
printf("4");
}
return NULL;

P2:

while(1) {
printf("5");
printf("6");
printf("7");
printf("8");
}
return NULL;

根据我对并行线程的了解,它不会打印 12345678,而是由于缺乏同步而完全随机变化的数字。

但是,当我尝试在真实代码中复制它时,它一直打印 1234 几次,然后切换到 5678,打印几次并返回到 1234。

是我对线程的理解有误还是我的代码不等同于问题?

void *print1(void *arg) {
while(1) {
printf("1");
printf("2");
printf("3");
printf("4\n");
}
return NULL;
}

void *print2(void *arg) {
while(1){
printf("5");
printf("6");
printf("7");
printf("8\n");
}
return NULL;
}


int main() {
pthread_t tid1, tid2;
pthread_create(&tid1, NULL, print1, NULL);
pthread_create(&tid2, NULL, print2, NULL);
pthread_join(tid1, NULL);
pthread_join(tid2, NULL);
return 0;

}

最佳答案

在多线程时不能依赖时间假设。

对这个问题的解释是,循环内的 printf 序列执行时间非常短,可以在给定线程的时间片内执行。

关于c - 关于并行 POSIX 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20621543/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com