并发编程练习题Part a求解:unknown()返回值对线程执行的影响
并发编程题解答
Part a 结论验证
你对Part a的判断方向是对的,程序确实存在正常终止的执行路径。不过你提到的场景推导有一处细节需要修正:如果线程t一直无法将x累加至1000,t会进入无限循环,哪怕s运行完所有循环终止,整个程序也不算正常结束。
你描述的路径调整后即可成立:线程s某次运行时unknown()返回≥1000的结果并赋值给x,此时线程t判断x < 1000不成立,直接终止循环退出,后续s跑完剩余的所有循环后也终止,两个线程都正常退出,程序执行结束。
你的疑问解答
如果unknown()首次返回500后,下一轮返回499,线程t会恢复运行。两个线程共享的变量x没有加任何同步保护,取值完全取决于两个线程的执行时序:当线程s将x赋值为499后,线程t判断x < 1000的条件成立,就会继续执行x++的累加逻辑。
补充更易触发的终止路径
还有一种非常容易触发的正常终止路径:线程t先拿到CPU执行权,在线程s还没执行任何赋值操作前,就将x从0连续累加至1000,此时t满足终止条件退出,后续线程s执行1000次x = unknown()操作不会触发t的任何逻辑,s执行完所有循环后程序整体正常终止。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

