80 likes | 206 Views
práce s vlákny a aplikační domény v .NET Framework aplikacích. Architektura technologie .NET Jan Martinovi č, FEI - Katedra Informatiky. Třída Thread. Vytváří a kontroluje vlákna, nastavuje priority a získává jejich stav Vlastnosti Priority ThreadState IsAlive IsBackground
E N D
práce s vláknya aplikační domény v .NET Framework aplikacích Architektura technologie .NET Jan Martinovič, FEI - Katedra Informatiky
Třída Thread • Vytváří a kontroluje vlákna, nastavuje priority a získává jejich stav • Vlastnosti • Priority • ThreadState • IsAlive • IsBackground • Statické vlastnosti • CurrentThread • Metody • Start • Sleep • Join • Interrupt • Abort • ResetAbort
Delegát ThreadStart 1/2 classWork { privateint data; public int Data { get { return data; } set { data = value; } } public static voidDoWork() { Console.WriteLine("Statická metoda"); } public voidDoMoreWork() { Console.WriteLine("Instanční metoda. Data = {0}", Data); } }
Delegát ThreadStart 2/2 • class Test • { • static voidMain() • { • ThreadStartthreadDelegate = newThreadStart(Work.DoWork); • ThreadnewThread = newThread(threadDelegate); • newThread.Start(); • // Od .NET 2.0 nemusíme vytvářet instanci ThreadStart • Work w = newWork(); • w.Data = 42; • threadDelegate = w.DoMoreWork; • newThread = newThread(threadDelegate); • newThread.Start(); • } • }
Synchronizace zamykáním • Příkaz lock je používán pro synchronizaci vláken, které přistupují ke společným zdrojům • lock nastavuje zámek na objekt • ObjectthisLock = newObject(); • lock (thisLock) • { • // Criticalcodesection • }
lock1/2 • public classLockExample • { • privatereadonlystringword; • public LockExample(stringword){this.word = word} • public void RunT0() • { • lock (Console.Out) • { • for (int i = 0; i < 10; i++) • { • Console.Write(word); • Thread.Sleep(100); • } • } • } • }
lock2/2 • public classExample • { • public static voidMain() • { • LockExample le1 = new LockExample("a"); • LockExample le2 = new LockExample("b"); • Thread t1 = newThread(le1.RunT0); • Thread t2 = newThread(le2.RunT0); • t1.Start(); • t2.Start(); • } • }
Třída Monitor • Statické metody • Enter • TryEnter • Exit • Wait • Pulse • PulseAll lock (obj) { … } // je kompilováno jako Monitor.Enter(obj) try { … } finally { Monitor.Exit(obj) }