组合:由两个线程访问的变量

时间:2016-10-30 16:08:57

标签: algorithm language-agnostic combinatorics

线程A和B可以同时访问单个变量。每个线程对变量执行一系列访问(读取和写入)。每个线程将其读取的结果存储到一个数组中。会话的结果由两个数组定义。

给定线程执行的访问可能无法重新排序。但是,来自两个线程的访问可以是交错的,因此结果将取决于该交织。 考虑到两个访问顺序,我们如何才能有效地计算可能结果的数量?假设所有写入都产生不同的值。

    Example access sequences:
        Thread A: [write(71), read()]
        Thread B: [read(), write(72), write(73), read()]

    Example interleaving:
        [a_write(71), b_read(), b_write(72), a_read(), b_write(73), b_read()]

    Example outcome:
        a_results = [72]
        b_results = [71, 73]

P.S。这不是家庭作业,它只是我自己设想的一个问题。

1 个答案:

答案 0 :(得分:1)

这看起来像是可以通过动态编程解决的问题。

我建议寻找解决子问题的方法:

  

假设我们从线程1进行了x次访问,从线程2进行了y访问,并且最后一次访问是由线程z(1或2)完成的写入,那么有多少不同的结果。

DP阵列将是3维:DP [x] [y] [z]。

将在DP中计算总计2 *(线程1中的访问次数)*(线程2中的访问次数)槽。

要填充数组中的每个条目,您需要对数组的前几个条目求和,因此我怀疑整体复杂性将在O(n ^ 3)附近,其中n是访问次数。