Synchronizace threadů
Včera jsem se pokušel napsat příklad, který by demonstroval co se stane, pokud thready využívající sdílený prostředek nejsou synchronizovány. Jak asi každý ví, že se to tam a tam může pokazit, snaží se automaticky myslet tak, aby tomuto nedeterministickému chování předešel. Já jsem však potřeboval napsat příklad, který by toto záměrně porušoval. Pachtil jsem se s tim poměrně dlouho – myslel jsem si, že špatný příklad lehce dokážu vytvořit – a hle, není to tak jednoduché. 😃
Pokud by tedy někdo potřeboval příklad, který by toto ukázal, může využít tento (těžce vymyšlený 😃 ):
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace synchro
{
	class Program
	{
		public static int globalni = 0;
		static void Main(string[] args)
		{
			for (int i = 0; i < 5; i++)
			{
				ThreadStart ts = new ThreadStart((new Worker()).Run);
				new Thread(ts).Start();
			}
			Console.ReadKey();
		}
	}
	class Worker
	{
		public Worker()
		{
		}
		public void Run()
		{
			//lock(typeof(Program))
			{
				int i = Program.globalni;
				i++;
				Thread.Sleep(new Random().Next(2000));
				Program.globalni = i;
				Console.WriteLine(Program.globalni.ToString());
			}
		}
	}
}
