我有一个全局共享变量,并且每个生成的5个线程都会更新5次。根据我的理解,增量操作由3条指令组成
load reg, M
inc reg
store reg, M
所以我想问一下,在这种情况下,5个线程中任意交错的最大值和最小值是多少。
所以根据我的说法,最大值将是25(我100%确定它可以超过25)并且最小值是5.但是我对最小值不太确定。在一些任意交错中它可以小于5吗? 任何输入将不胜感激。
/* Global Variable */
int var = 0;
/* Thread function */
void thread_func()
{
for(int c = 0; c < 5; c++)
var++;
}
答案 0 :(得分:16)
鉴于你对增量的定义,我同意你的最大值为25。
但是,我认为在以下情况下min可以是2。我已经命名了5个线程A,B,C,D和E.
答案 1 :(得分:0)
如果我使用jtdubs给出的相同逻辑,则在下列情况下最小值应为1.
让我们使用与A,B,C,D和E相同的5个线程命名。
答案 2 :(得分:0)
我同意至少2(不是1)。
最小等于1的解决方案忽略了A在共享内存中存储1后仍然没有完成运行的事实。 没有其他线程留给&#34;干扰&#34;,线程A必须仍然运行以结果5结尾的剩余4次迭代。
2个解决方案启用的最小值是在剩余的两个线程A和B之间的最终游戏,在所有其他线程完成运行之后,导致最小可能的结果。 B&#34;废物&#34; 4次迭代只能再次加载1,增加它并在A运行完成后存储2。