|
Тема |
проблем |
|
Автор |
Kypaции (непознат) |
|
Публикувано | 08.01.09 02:31 |
|
|
/*
* realizirame prosta implementaciq na imame nqkakyw bufer - masiw ot 5 elementa
* imame i konsumator koito 4ete edin element i spi nqkakwo wreme - random 4islo mejdu 1 i 5 sekundi
* imame proizwolen broi ni6ki wuweden ot potrebitelq i wssqka ni6ka pishe 4isla w toq msiw a konsumatora e nishka koqto 4ete 4isla
* tezi deto pishat spqt ot edna do 3 sekundi sled koeto pishat w masiwa
*
*/
такам ето го н кратко условието и долу се опитах да направя задачката само че ми дава синтактични грешки въпроса ми е как да направя скритите променливи видими, трябва ли да създам инстанция на класа в мейна(като така ще създам безкрайна рекурсия май) или да ги изнеса тея променливи трите в друг клас и на него да му създам инстанция. Има ли някакъв начин да г направя глобални за целия неймспейс ?!?!?
+ долната реализация е писана от човек дето знае кво е нишка отпреди 5 часа
using System;
using System.Collections.Generic;
using System.Threading;
namespace Damqnka
{
class Reader
{
int rand()
{
Random r = new Random();
return r.Next(1, 5);
}
public Reader() { }
public void Read()
{
if (BroiAktivniNishki)
{
if (counter)
{
Console.WriteLine("{0}", arr[counter - 1]);
counter--;
number--;
Monitor.Pulse(arr);// oswobojdawame go w sluchai che e wait shtoto e bil pylen
Thread.Sleep(rand());
}
else
{
Monitor.Wait(arr);// izchakwane dokato ne se zapishe neshto w buffer
}
}
}
}
class Writer
{
public int number;
public Writer(int x)
{
this.number = x;
}
int rand()
{
Random r = new Random();
return r.Next(1, 3);
}
public void Write()
{
while (0 != number)
{
if (counter != 5)
{
arr[counter] = rand();
counter++;
Monitor.Pulse(arr);//oswobojdawame go wsluchai che e bil wait shtoto e bil prazen
}
else
{
Monitor.Wait(arr);// izchakwane da se prochete neshto ot buffer-a
}
if (number == 0)
{
BroiAktivniNishki--;
}
}
}
}
class Program
{
public int[] arr = new int[5];// w towa shte se chete i pishe
public sbyte counter; // marker w masiwa kolko elementa sa zapisani - ot 0 do 5
public int BroiAktivniNishki;// broi tekushto aktiwni writeri
static void Main(string[] args)
{
BroiAktivniNishki = 0;
counter = 0;
int i = -1;// za da ne puskame prekaleno mn nishki - i e broqna nishkite
Console.WriteLine(" wkarai broq na nishki writeri");
while( (i > 10) || (i <1) )
i = Int32.Parse(Console.ReadLine());
int[] BroiPisane = new int;
Console.WriteLine(" za wseki writer wkaraj kolko da otpechati");
for (int j = 0; j < i; i++)
{
BroiPisane[j] = Int32.Parse(Console.ReadLine());
}
for (int j = 0; j < i; i++)
{
Writer t = new Writer(BroiPisane[j]);
ThreadStart start = new ThreadStart(t.Write); // treadstart delegate izpolzwan ot bibliotekata
Thread thread = new Thread(start);
thread.Start();
Damqnka.Program.BroiAktivniNishki++;
}
Reader tt = new Reader();
ThreadStart start1 = new ThreadStart(tt.Read); // treadstart delegate izpolzwan ot bibliotekata
Thread thread1 = new Thread(start1);
thread1.Start();
}
}
}
|
| |
|
|
|