Concurrency 并发性-如何从单独的任务分配变量?

Concurrency 并发性-如何从单独的任务分配变量?,concurrency,Concurrency,考虑以下场景: |---------------------|------------------| | Task 0 | Task 1 | |---------------------|------------------| | x = 1; | y = 1; | |---------------------|------------------| |

考虑以下场景:

    |---------------------|------------------|
    |        Task 0       |       Task 1     |
    |---------------------|------------------|
    |        x = 1;       |       y = 1;     |
    |---------------------|------------------|
    |        a = y;       |       b = x;     |
    |---------------------|------------------|
并发任务结束时a和b的值是多少?我不知道如何处理这个问题


每个赋值都以原子方式执行。在任务中,语句按顺序出现。在执行之前,x和y都设置为0

即使分配是原子的,也无法确定两个任务运行后的值。这是因为您仍在处理两个并发运行的任务,并且这些值依赖于无法保证的语句交错。但您当然可以生成一组可能的值对

例如,假设任务0在任务1能够设置y之前运行完成。我们有
{a=0,b=1}
。当任务1在任务0能够设置x之前运行到完成时,也可以这样说,给定
{a=0,b=1},{a=1,b=0}
。这个简单的例子只剩下一种可能性,因为它们都不能为0,所以最终的集合为:

[{a=0,b=1},{a=1,b=0},{a=1,b=1}]


如何从单独的任务中分配变量


避免并发问题的最简单方法是不创建它们。让任务返回x和y的值,并在序列代码中分离a和b的突变。任务之间存在依赖关系,所以为什么不在安全的情况下将依赖关系从任务中拉出呢

如果没有同步,你就不能肯定地说。@ChiefTwoPencils我用更多的信息更新了这个问题,以防有帮助。