Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 07:06 23.01.21 
Клубове/ Компютри и Интернет / .NET Всички теми Следваща тема Пълен преглед*
Информация за клуба
Тема проблем
Автор 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();
}
}
}



Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2021 Dir.bg Всички права запазени.