Parameterized Thread Start Thread Start 1 object public
![](https://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-1.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-2.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-3.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-4.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-5.jpg)
![Передача параметров потоку � Использование делегата Parameterized. Thread. Start вместо Thread. Start � Передача Передача параметров потоку � Использование делегата Parameterized. Thread. Start вместо Thread. Start � Передача](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-6.jpg)
Передача параметров потоку � Использование делегата 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); � Другой способ – класс-обертка
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-7.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-8.jpg)
![Состояния потоков Unstarted Suspend Running Suspend Requested Wait Sleep Join Abort Requested Finished Состояния потоков Unstarted Suspend Running Suspend Requested Wait Sleep Join Abort Requested Finished](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-9.jpg)
Состояния потоков Unstarted Suspend Running Suspend Requested Wait Sleep Join Abort Requested Finished
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-10.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-11.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-12.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-13.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-14.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-15.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-16.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-17.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-18.jpg)
![Общие переменные объекта � Вместе с тем потоки разделяют данные, относящиеся к тому же Общие переменные объекта � Вместе с тем потоки разделяют данные, относящиеся к тому же](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-19.jpg)
Общие переменные объекта � Вместе с тем потоки разделяют данные, относящиеся к тому же экземпляру объекта 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() Операции не являются атомарными class incriment { decimal l = 0; public void inc()](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-20.jpg)
Операции не являются атомарными 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(); }
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-21.jpg)
![Класс Interlocked � Атомарные операции. Статические члены • Interlocked. Increment(ref i); i – long Класс Interlocked � Атомарные операции. Статические члены • Interlocked. Increment(ref i); i – long](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-22.jpg)
Класс 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) – для ссылочных типов
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-23.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-24.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-25.jpg)
![Reader. Writer. Lock � � � Очереди читателей и писателей. Много потоков могут читать Reader. Writer. Lock � � � Очереди читателей и писателей. Много потоков могут читать](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-26.jpg)
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 Но имеет еще одно Reader. Writer. Lock. Slim � � Аналогичен Reader. Writer. Lock Но имеет еще одно](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-27.jpg)
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();
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-28.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-29.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-30.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-31.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-32.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-33.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-34.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-35.jpg)
![](http://slidetodoc.com/presentation_image_h/236e6e37dc4e5b6e7a7e8f45c344d4e6/image-36.jpg)
- Slides: 36