1

我有一个由 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++

否则,没有变化。

当然,在所有线程完成检查之前不会进行任何更改。

我的问题是,如果我是数组列表中的一个线程,我该如何查看我的邻居?

我想到了以下几点:

  1. 对于每个线程,检查邻居。
  2. 每个线程将持有一个 int 字段,相应地对其进行更改,0 表示无变化,1 表示 inc,2 表示 dec。
  3. 通过缓冲区(计数器)同步以计算所有线程并确保每个人都完成了。
  4. 应用 inc、dec 或不更改。

你怎么看?

谢谢。

4

2 回答 2

0

我会说你应该使用CyclicBarrier让所有线程互相等待。除此之外,要检查他们的邻居,只需在构建时给每个线程在列表中的索引和列表本身,以便每个线程都可以查找他的邻居的值。

也就是说,我不知道目标是什么,但是循环遍历数组的单个线程可能会更简单、更快。

于 2013-05-22T21:45:12.447 回答
0

使用 ArrayList,您可以使用 get(i) 获取特定索引。使用 get(i+1) 和 get(i-1) 它应该可以解决问题

于 2013-05-22T22:29:28.647 回答