gpt4 book ai didi

用户级和内核级线程的并发性。为什么输出不同?

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:31 24 4
gpt4 key购买 nike

我开始学习线程,现在我明白了这本书让我混淆了用户级线程和内核级线程。

这本书非常强调差异并提出了一个问题,说以下两个类似代码的输出是不同的,但是(据我所知),它们的输出对我来说似乎是相同的。

第一个是关于用户级线程:

int number = 0;
int main() {
fork()
if it is child {number--, return 0}
if it is parent {number++, wait till child return, print number}}

我的分析是,由于number--和number++只需要执行一次,执行完这2次就会打印输出,所以输出一定是0。

第二种情况是关于内核级线程的:

int number = 0;
t1() {number--}
t2() {number++}
main() {
createThread(pass t1)
createThread(pass t2)
wait till both complete
print number
}

在这种情况下,同样的事情,内核创建了两个线程,一个 --,另一个++,所以它们都只需要执行一次。结果必须再次为 0。

但是书上说输出是不一样的,或者说是干预导致输出不一样,谁能告诉我为什么?

最佳答案

在第一种情况下,它不是创建线程,而是 fork 一个进程(查看 fork() 函数的描述)。 fork 进程有自己的内存,从父进程复制而来,因此子进程中数字递减的结果对父进程没有影响。父进程打印number的结果为1。

关于用户级和内核级线程的并发性。为什么输出不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12398408/

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