
- •Гугл-дока для екзамену Архітектура компютера. Програмне забезпечення
- •1. Поняття платформи. Структура та основні складові .Net Framework.
- •2. Функції та структура clr.
- •3. Поняття збірки. Метадані. Схема виконання .Net-додатку в clr.
- •4. Система типів даних мови c#. Типи-значення.
- •5. Система типів даних мови c#. Типи-посилання.
- •6. Масиви в c#: одновимірні, багатовимірні, ступеневі. Методи та властивості класу Array.
- •7. Методи в c#: модифікатори доступу, передача параметрів, перевантаження, наслідування.
- •7. Методи в c#: модифікатори доступу, передача параметрів, перевантаження, наслідування.(Второй вариант)
- •8. Багатопоточне програмування засобами .Net. Структура процесу ос Windows. Клас Thread.
- •9. Характеристика засобів синхронізації потоків та процесів .Net Framework.
- •10. Об’єкти синхронізації потоків .Net Monitor та ReaderWriterLock.
- •11. Об’єкти синхронізації потоків .Net lock та ManualResetEvent.
- •12. Об’єкти синхронізації потоків .Net AutoResetEvent та Mutex.
- •13. Обробка виключних ситуацій в мові c#, основні класи та методи .Net щодо обробки виключень.
- •14. Віртуальні функції та абстрактні класи в мові c#.
- •15. Статичні конструктори, поля та методи класів в мові c#.
- •17. Інтерфейси в мові c#. Порівняння з абстрактними класами. Сфера застосування інтерфейсів.
- •18. Огляд колекцій в .Net. Основні інтерфейси, що лежать в основі доступу до колекцій.
- •19. Колекція ArrayList. Методи та властивості. Переваги та недоліки використання.
- •20. Колекції Stack та Queue. Методи та властивості.
- •21. Колекція BitArray. Методи та властивості. Переваги та недоліки використання.
- •22. Колекція HashTable. Методи та властивості. Переваги та недоліки використання.
- •23. Характеристика generic-колекцій .Net
- •24. Колекція LinkedList. Методи та властивості.
- •26. Групи класів доступу до даних технології ado.Net.
- •27. Характеристика від’єднаних класів технології ado.Net.
- •28. Характеристика під’єднаних класів технології ado.Net.
- •29. Завантаження бінарних об’єктів у базу даних та вивантаження їх із неї.
- •30. Транзакції в базах даних. Інтерфейс транзакцій технології ado.Net.
- •31. Особливості мережевих протоколів tcp та udp. Поняття порту, адреси, сокету.
- •32. Характеристика сокетів зі з’єднанням. Інтерфейс класу Socket для даного типу сокетів.
- •33. Характеристика сокетів без з’єднання. Інтерфейс класу Socket для даного типу сокетів.
- •34. Характеристика асинхронних та синхронних сокетів. Інтерфейс класу Socket для даного типу сокетів.
- •35. Узагальнений алгоритм взаємодії клієнта та сервера при синхронному сокетному способі обміну даними зі з’єднанням. Інтерфейс класу tcpListener.
- •36. Узагальнений алгоритм взаємодії клієнта та сервера при синхронному сокетному способі обміну даними без з’єднання. Інтерфейс класу tcpClient..
- •37. Загальна схема та реалізація багатопоточного сокетного сервера зі з’єднанням.
- •38. Поняття сервіс-орієнтованого архітектури. Web-сервіси: переваги та недоліки, стандарти в основі Web-сервісів.
- •Стандарти, що використовуються веб-службами
- •Переваги веб-служб
- •Недоліки веб-служб
- •39. Компоненти архітектури Web-сервісів. Протоколи для Web-сервісів. Приклад реалізації серверної частини Web-сервісу.
- •Используемые стандарты
10. Об’єкти синхронізації потоків .Net Monitor та ReaderWriterLock.
public static class Monitor
Класс Monitor контролирует доступ к объектам, предоставляя блокировку объекта одному потоку. Блокировки объектов предоставляют возможность ограничения доступа к части кода. Пока поток владеет блокировкой для объекта, никакой другой поток не может ею завладеть.Следует использовать класс Monitor для блокировки объектов (т. е. ссылочные типы, а не типы значений).
Monitor имеет следующие свойства:
Связывается с объектом по требованию.
Он несвязан, что означает, что он может быть вызван непосредственно из любого контекста.
Невозможно создать экземпляр класса Monitor.
Следующая информация хранится для каждого синхронизированного объекта:
Ссылка на поток, который в данный момент владеет блокировкой.
Ссылка на очередь готовности, которая содержит потоки, готовые получить блокировку.
Ссылка на очередь ожидания, содержащую потоки, ожидающие уведомления об изменении состояния объекта с блокировкой.
Действие |
Описание |
Enter, TryEnter |
Получает блокировку для объекта. Это действие также отмечает начало критической секции. Ни один другой поток не может войти в критическую секцию, пока он выполняет инструкции в критической секции, используя другой объект с блокировкой. |
Wait |
Освобождает блокировку объекта для того, чтобы разрешить другим потокам осуществлять блокировку и получить доступ к объекту.Вызывающий поток ожидает, пока другой поток не произведет доступ к объекту. Для уведомления ожидающих потоков об изменении состояния объекта используются импульсные сигналы. |
Pulse(сигнал),PulseAll |
Посылает сигнал одному или более ожидающим потокам. Сигнал уведомляет ожидающий поток о том, что состояние объекта с блокировкой изменилось и владелец блокировки готов освободить ее. Ожидающий поток помещен в очередь готовности объекта, так что в конечном итоге он может получить блокировку для объекта. Когда поток получает блокировку, он может проверить новое состояние объекта для того, чтобы увидеть, было ли достигнуто требуемое состояние. |
Exit |
Освобождает блокировку объекта. Это действие также отмечает конец критической секции, защищенной объектом с блокировкой. |
Следует использовать методы Enter и Exit для того, чтобы пометить начало и конец критической секции. Если критическая секция является набором непрерывных инструкций, тогда блокировка, осуществляемая методом Enter, гарантирует, что только один поток может выполнять обозначенный код, используя объект с блокировкой.
ReaderWriterLock - Определяет блокировку, которая поддерживает один пишущий поток и несколько читающих. IsReaderLockHeld - Возвращает значение, указывающее, владеет ли текущий поток блокировкой чтения. IsWriterLockHeld - те саме для запису. Класс ReaderWriterLock используется для синхронизации доступа к ресурсу. В каждый момент он разрешает или одновременный доступ на чтение для нескольких потоков, или доступ на запись для одного потока. Если ресурс не изменяется часто, класс ReaderWriterLock обеспечивает лучшую пропускную способность, чем простая блокировка по принципу "один поток за раз", например предоставляемая классом Monitor.
Класс ReaderWriterLock работает оптимально, когда большинство обращений к ресурсу производятся для чтения, а операции записи выполняются нечасто и имеют короткую продолжительность. Несколько читающих потоков чередуются с одним записывающим потоком, так что ни те, ни другие не блокируются на длительные периоды времени.
Читающие и пишущие потоки находятся в отдельных очередях. Когда поток освобождает блокировку записи, в тот же момент всем потокам, находящимся в очереди читающих потоков, предоставляются блокировки чтения. Когда все эти блокировки будут освобождены, следующему потоку (если такой существует), ожидающему в очереди записывающих потоков, предоставляется блокировка записи, и т. д. Другими словами, объект ReaderWriterLock переключается между коллекцией читающих и одним записывающим потоком.Пока поток в очереди пишущих потоков ожидает освобождения активных блокировок чтения, потоки, запрашивающие новые блокировки чтения, собираются в очереди читающих потоков. Их запросы не удовлетворяются, даже если они пользуются совместным доступом одновременно с существующими владельцами блокировок чтения; это защищает пишущие потоки от блокировок на неограниченное время читающими потоками.
AcquireReaderLock(Int32) - Получает блокировку чтения AcquireWriterLock(Int32) - Получает блокировку записи. ReleaseLock, ReleaseReaderLock, ReleaseWriterLock - Освобождает блокировку.