线程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。这不是家庭作业,它只是我自己设想的一个问题。
答案 0 :(得分:1)
这看起来像是可以通过动态编程解决的问题。
我建议寻找解决子问题的方法:
假设我们从线程1进行了x次访问,从线程2进行了y访问,并且最后一次访问是由线程z(1或2)完成的写入,那么有多少不同的结果。
DP阵列将是3维:DP [x] [y] [z]。
将在DP中计算总计2 *(线程1中的访问次数)*(线程2中的访问次数)槽。
要填充数组中的每个条目,您需要对数组的前几个条目求和,因此我怀疑整体复杂性将在O(n ^ 3)附近,其中n是访问次数。