1

如何调整给定 k 线程之间的公平性以生成一些输出?
换句话说,假设我们有 k 个线程打印“1”,n 个线程打印“2”。
现在我们如何在线程之间设置公平性,以便每个线程打印(例如“1”)与其他(k - 1)打印(例如“1”)一样多。对于 n 线程打印“2”也是如此。

4

2 回答 2

1

在创建线程之前,创建一个空信号量数组[0..numThreads-1],每个要创建的线程一个。在创建时向每个线程发送一个递增信号量索引 0..numThreads-1 的信号。

在线程函数中,让它等待它的信号量[index],然后打印一些东西,然后发出信号[(index+1) mod numThreads] 信号量,然后循环循环以再次等待信号量[index]。

一旦你这样做了,什么都不应该发生。

在任何地方投入一个信号量单元。

于 2013-08-07T17:40:36.763 回答
0

好吧,我明白了一点,如果你将这个数字发送给他们的构造函数,你可以让一个线程打印一个数字。例如:

public class MyThread extends Thread 
{ 
   int number = 0;
   public MyThread(int number) {
      this.number = number;
   }

   @Override
   public void run()
   { 
      while(true) {
         System.out.println(this.number); 
         this.sleep(1000);//control exception
      }
   }

}

然后在你的主要

public class Main() {
    public static void main(String[] args) {
       int k = 10
       for(int i = 0; i < k; k++) {
          MyThread mt = new MyThread(1);
          mt.start();
          mt.join();
       }
    }
}

您应该为 Thread printing 2 重复类似的表格

于 2013-08-07T16:38:59.253 回答