gpt4 book ai didi

multithreading - 线程与同步

转载 作者:行者123 更新时间:2023-12-03 12:52:44 24 4
gpt4 key购买 nike

我对线程和同步的工作方式感到困惑。我正在解决一个示例问题,描述如下:

有两个线程:P和Q。两个线程共享变量counter。
一个线程中计数器的修改对另一线程可见。这
增量指令将一加到变量中,存储新值。

1   global integer counter = 0
2
3 thread P()
4 incr(counter)
5 print counter
6 end
7
8 thread Q()
9 print counter
10 incr(counter)
11 print counter
12 incr(counter)
13 end

有三个打印语句输出计数器的值。在输出中
下面的列表,指示给定的输出是否可能,如果可能,则给出
P和Q的交错指令(使用线程和行号)
可以导致输出。

该示例具有输出122,可以吗?可以由 P4, Q9, Q10, P5, Q11, Q12产生。我无法解决这个问题。

最佳答案

假定线程P首先启动,然后将“计数器”加1。然后将其挂起并启动线程Q,读取“计数器”并打印其值(“1”)。下一个线程Q递增“计数器”,现在为“2”。然后线程Q挂起,线程P继续。现在,它读取“计数器”并打印其值(“2”)。线程P终止。线程Q继续,读取并打印“计数器”(“2”)。然后将“计数器”加1。

因此,输出为:“122”

那是一种可能的执行顺序。一般来说,您永远无法分辨线程何时挂起以及线程何时继续进行,这就是本练习的重点。通过添加同步机制(此示例完全缺少),您可以再次控制执行顺序。

关于multithreading - 线程与同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226959/

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