до сих пор я думал, что любая операция, выполняемая над «общим» объектом (общим для нескольких потоков), должна быть защищена с помощью «синхронизации», несмотря ни на что. Видимо, я ошибался - в коде, который я недавно изучаю, много классов (поточно-ориентированных, как утверждает Автор), и только один из них использует Критическую секцию почти для каждого метода.
Как мне найти какие части / методы моего кода должны быть защищены с помощью CriticalSection (или любого другого метода), а какие нет?
Пока я не наткнулся на какое-либо интересное объяснение / статью / заметку в блоге, все результаты Google:
а) примеры синхронизации между потоком и графическим интерфейсом. От простого индикатора выполнения до самого сложного, но урок очевиден: каждый раз, когда вы открываете / изменяете свойство компонента GUI, делайте это в «Синхронизировать». Но не более того.
б) статьи, объясняющие критические разделы, мьютексы и т. Д. Просто разные подходы к защите / синхронизации.
в) Примеры очень-очень простых потоковобезопасных классов (потокобезопасный стек или список) - все они сделайте то же самое - реализуйте методы блокировки / разблокировки, которые входят / выходят из критического раздела и возвращают фактический указатель стека / списка при блокировке.
Теперь я ищу объяснение , какие части кода должны быть защищены .
может быть в форме кода;) но, пожалуйста, не предоставляйте мне еще одно "использование Synchronize для обновления индикатора выполнения" ...;)
спасибо!