LINUX.ORG.RU

Генератор перестановок

 , permutation,


0

1

Выдает ровно одну перестановку в один момент времени.

Если нужно 16 перестановок, то потребуется 2 в 4 моментов времени на генерацию всех, не больше и не меньше.

Сердце программы это поток-ячейка, содержащая один бит.

Этот бит после запуска приобретает значение то 0 то 1.

Затем поток останавливается на точно определенное время.

Если такт генератора равен 1 сек, то можно например точно сказать:

любое число длиной от 0 до 20 бит будет пройдено за не более чем 1*2 в 20 секунд

package qc;

public class Main
{
	public static void main(String[] argv)
	{
		
			try
			{
				int len = 4;
				int min_takt = 100;
				int num_cycles = 100;
				QGThread[] qs = new QGThread[len]; 
				
				for(int i=0;i<len;i++)
				{
					qs[i] = new QGThread(min_takt*(int)Math.pow(2.0,(double)(len - i - 1)));
					qs[i].start();
				}
				
				//work with 4 threads
				for(int i=0;i<num_cycles;i++)
				{
					byte t1 = qs[0].getBit(); //most significant bit
					byte t2 = qs[1].getBit();
					byte t3 = qs[2].getBit();
					byte t4 = qs[3].getBit(); //least significant bit
					System.out.println(""+t1+""+t2+""+t3+""+t4);
					Thread.sleep(min_takt);
				}
				
				
				//ostanov
				for(int i=0;i<len;i++)
				{
					qs[i].stopQG();
				}
				
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		
	}
}

//===================================


package qc;

public class QGThread extends Thread
{
	
	private byte bit = Const.ONE;
	private int takt = Const.UNDEFINED_TIME;
	private boolean stop = false;
	
	public QGThread(int t)
	{
		takt = t;
	}
	
	public synchronized void setBit(byte b)
	{
		bit=b;
	}
	
	public synchronized byte getBit()
	{
		return bit;
	}
	
	public synchronized void stopQG()
	{
		stop=true;
	}
	
	public void run()
	{
		try
		{
			while(stop==false)
			{
				if(bit == Const.ONE) bit=Const.ZERO;
				else bit=Const.ONE;
				Thread.sleep(takt);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
}


Олег, это не ЖЖ. Здесь не бывает повествования. Здесь бывают вопросы или дискуссии. :)

ak372771
()

поток останавливается на точно определенное время
Thread.sleep(min_takt);

Заблуждаешься http://www.javamex.com/tutorials/threads/sleep.shtml

А вообще программа кишеет ошибками, тебе бы книжку про многопоточное программирование какую-нибудь прочитать.

Manhunt ★★★★★
()
Ответ на: комментарий от Manhunt

тебе бы книжку про многопоточное программирование какую-нибудь прочитать

да, и мне. рекомендации?

Rastafarra ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.