对多个线程使用的变量执行命令

时间:2015-02-27 01:57:59

标签: multithreading operating-system thread-safety

给出两个线程执行计算的线程场景:

 x = x + 1 where x is a shared variable

可能的结果是什么,并说明您的答案可能发生的原因。

这是我的操作系统手册中的教科书问题,我很好奇,如果我需要更多信息来回答这个问题,比如什么x也被初始化以及线程执行此命令的次数或者只执行一次。我最初的答案是它可能是两个可能的答案,具体取决于线程执行OS的顺序。

1 个答案:

答案 0 :(得分:1)

这是一项相当简单的任务,因此可能出现的问题可能太多了。

我能立即想到的唯一问题是,如果一个线程在其计算中使用旧的x值。

例如:

以x = 2

开头

1)线程A读取x = 2

2)线程B读取x = 2

3)线程A写入x = 2 + 1

x = 3

4)线程B写入x = 2(x的旧值)+ 1

x = 3,应为4

如果超过1个线程在第一个线程写入之前读取该值,这将更加明显。