Diskuze: C# synchronizace vláken
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Pohrál jsem si s tím a snad mám i funkční řešení viz kod..
class Program
{
static private readonly object theLock = new object();
static private int majiciJidlo = 0;
static private int jedici = 0;
static private int cekajiciNaOdchod = 0;
static void getFood()
{
Console.WriteLine("Vydano jidlo(UHO) {0}", Thread.CurrentThread.ManagedThreadId.ToString());
}
static void dine()
{
Console.WriteLine("Začina baštit {0}", Thread.CurrentThread.ManagedThreadId.ToString());
Thread.Sleep(2000);
Console.WriteLine("Dobaštil {0}", Thread.CurrentThread.ManagedThreadId.ToString());
}
static void leave()
{
Console.WriteLine("Ochází :( {0}", Thread.CurrentThread.ManagedThreadId.ToString());
}
static void doAction()
{
getFood();
lock (theLock)
{
++majiciJidlo;
}
//ověření, zda na jedení čekají dva, popř, jeden sedí u stolu => nebude u stolu sám...
while (true)
{
if (majiciJidlo > 1 || jedici > 1)
{
//ověření, zda na jedení čekají dva, popř, jeden sedí u stolu => nebude u stolu sám...
lock (theLock)
{
--majiciJidlo;
++jedici;
}
break;
}
}
while(true)
{
if (cekajiciNaOdchod > 0 || jedici > 0 )
{
dine();
++cekajiciNaOdchod;
break;
}
}
leave();
--cekajiciNaOdchod;
}
static int Main()
{
for (int i = 0; i < 4; i++)
{
Thread t1 = new Thread(() => {doAction(); });
t1.Start();
}
Console.ReadLine();
return 0;
}
}
Ale chtěl jsem se zeptat, v knížce jsem našel příklad, kde se využívají semafory, pro synchronizaci.. Jednalo se o vstup do kina, kde byl omezen maximální počet diváků. Chtěl jsem se zeptat, jestli by šli semafory využít i na můj příklad, případně poprosit alespoň o nějakou ideu, jak to udělat
Zobrazeno 2 zpráv z 2.