Witam. Ćwicząc pracę z synchronizacją między wątkami chciałem zrobić tak, aby 2 wątki pracowały na zmianę, dotychczas z moich obserwacji wynika, że raz jeden wątek wykona pracę 10x, a drugi 5x, potem znów pierwszy wykona ileś tam, a potem drugi. Chciałbym, aby odbywało się to po kolei i na zmianę czyli: wątek1, wątek2, wątek1, wątek2. Jak to wykonać na poniższym kodzie? Dodam, że kiedyś czytałem o czymś takim, tylko nie pamiętam gdzie i znaleźć nie mogę.
PS Wiem, że to można wykonać za pomocą zmiennych pomocniczych, ale chyba da się zrobić to bez nich, właśnie o ten sposób pytam.
static Thread th1;
static Thread th2;
static StreamWriter writer;
static Semaphore sema;
static void Main(string[] args)
{
th1 = new Thread(new ThreadStart(th1_Task));
th2 = new Thread(new ThreadStart(th2_Task));
writer = new StreamWriter("test.txt");
sema = new Semaphore(0, 1);
sema.Release();
th1.Start();
th2.Start();
}
static void th1_Task()
{
while (true)
{
sema.WaitOne();
writer.WriteLine("Thread " + Thread.CurrentThread.ManagedThreadId);
sema.Release();
}
}
static void th2_Task()
{
while (true)
{
sema.WaitOne();
writer.WriteLine("Thread " + Thread.CurrentThread.ManagedThreadId);
sema.Release();
}
}