Parameterized Thread Start Thread Start 1 object public






Передача параметров потоку � Использование делегата Parameterized. Thread. Start вместо Thread. Start � Передача только 1 параметра, но параметра типа object • public static void thread. Method(object o){. . } • Thread thread = new Thread(new Parameterized. Thread. Start(thread. Method)); • thread. Start(obj); � Другой способ – класс-обертка



Состояния потоков Unstarted Suspend Running Suspend Requested Wait Sleep Join Abort Requested Finished










Общие переменные объекта � Вместе с тем потоки разделяют данные, относящиеся к тому же экземпляру объекта class Test. Class { bool done = false; public void Go() { if (!done) { done = true; Console. Write. Line("Done"); } } } class Thread. Test { static void Main() { Test. Class test. Class = new Test. Class(); new Thread(test. Class. Go). Start(); test. Class. Go(); } }

Операции не являются атомарными class incriment { decimal l = 0; public void inc() { for (int i = 0; i < 100000; ++i) l = l + 1; Console. Write. Line(l); } } class Program { static void Main(string[] args) { incriment i = new incriment(); for (int j = 0; j < 10; ++j) new Thread(i. inc). Start(); }


Класс Interlocked � Атомарные операции. Статические члены • Interlocked. Increment(ref i); i – long или int Interlocked. Increment • Interlocked. Decrement(ref i); i – long или int Interlocked. Decrement • Interlocked. Add(ref i 1, i 2); Переменные int, long Interlocked. Add • Interlocked. Exchange(ref i, value); Interlocked. Exchange • Interlocked. Exchange<T>(ref T i, T value); Interlocked. Exchange<T> • Interlocked. Compare. Exchange(ref i, value, compared); Interlocked. Compare. Exchange �Если i == compared, то I = value. Переменные типов: int, long, float, double, object • Interlocked. Compare. Exchange <T> (ref T i, T value, T compared) – для ссылочных типов




Reader. Writer. Lock � � � Очереди читателей и писателей. Много потоков могут читать данные Только один поток может захватить объект для записи. Reader. Writer. Lock rwl = new Reader. Writer. Lock(); rwl. Acquire. Reader. Lock(timeout); Acquire. Reader. Lock rwl. Acquire. Writer. Lock(timeout); Acquire. Writer. Lock rwl. Upgrade. To. Writer. Lock(timeout); Upgrade. To. Writer. Lock rwl. Downgrade. From. Writer. Lock(ref cokie); Downgrade. From. Writer. Lock rwl. Release. Reader. Lock(); Release. Reader. Lock rwl. Release. Writer. Lock(); Release. Writer. Lock

Reader. Writer. Lock. Slim � � Аналогичен Reader. Writer. Lock Но имеет еще одно доп. Состояние: • Read mode • Write mode • Upgradeable mode Reader. Writer. Lock. Slim sl = new Reader. Writer. Lock. Slim(); sl. Enter. Read. Lock(); sl. Exit. Read. Lock(); sl. Enter. Write. Lock(); sl. Exit. Write. Lock(); sl. Enter. Upgradeable. Read. Lock(); sl. Exit. Upgradeable. Read. Lock();









- Slides: 36