Názory ke článku Vlákna v C# - 5. díl
mnn NOVÝ
22. 9. 2008
22. 9. 2008
Prestavka sice dlhsia nez minule ale clanok velmi dobry. Najuzitocnejsie su Auto|ManualResetEventy. Sice to uz mam nastudovane z Vasho "zdroja" ale precital som si to cele ak nahodou mi nieco predtym uslo.
Reagoval na komentář od uživatele mnn : Článek byl napsaný už dávno. Čekalo se jen na korekturu.
Jakub Sloup NOVÝ
23. 9. 2008
23. 9. 2008
Kdyby někoho zajímalo, jak udělat obdobu monitoru, který si ale narozdíl od něho pamatuje pořadí v jakém k němu bylo přistoupeno, tak tady je navod.
(ale bacha moc jsem to netestoval, jsem v C# začátečník)
using System.Threading;
public sealed class QueuedLock
{
private object innerLock;
private volatile int ticketsCount = 0;
private volatile int ticketToRide = 1;
public QueuedLock()
{
innerLock = new Object();
}
public void Enter()
{
int myTicket = Interlocked.Increment(ref ticketsCount);
Monitor.Enter(innerLock);
while (true)
{
if (myTicket == ticketToRide)
{
return;
}
else
{
Monitor.Wait(innerLock);
}
}
}
public void Exit()
{
Interlocked.Increment(ref ticketToRide);
Monitor.PulseAll(innerLock);
Monitor.Exit(innerLock);
}
}
example of usage:
QueuedLock queuedLock = new QueuedLock();
try
{
queuedLock.Enter();
// here code which needs to be synchronized
// in correct order
finally
{
queuedLock.Exit();
}