我有一个由 n 个线程组成的数组,每个线程都有 1 到 100 个。
对于每次迭代,所有线程都需要检查它们的邻居。
For thread i
IF thread[i].number > thread[i+1].number
AND thread[i].number > thread[i-1].number
THEN thread[i].number--
IF thread[i].number < thread[i+1].number
AND thread[i].number < thread[i-1].number
THEN thread[i].number++
否则,没有变化。
当然,在所有线程完成检查之前不会进行任何更改。
我的问题是,如果我是数组列表中的一个线程,我该如何查看我的邻居?
我想到了以下几点:
- 对于每个线程,检查邻居。
- 每个线程将持有一个 int 字段,相应地对其进行更改,0 表示无变化,1 表示 inc,2 表示 dec。
- 通过缓冲区(计数器)同步以计算所有线程并确保每个人都完成了。
- 应用 inc、dec 或不更改。
你怎么看?
谢谢。