Поделиться через


Практическое руководство. Координирование нескольких потоков выполнения

Чтобы многопоточные компоненты можно было безопасно использовать в потоках, необходимо согласовать доступ к общим ресурсам. Если несколько потоков одновременно пытаются получить доступ к общему ресурсу, может возникнуть состояние гонки, что вызывает повреждение данных. Состояние гоики можно избежать, используя блокировки. Подробные сведения о потокобезопасности и состояний гонки см. в разделе Потокобезопасные компоненты.

Чтобы создать блокировку для объекта, выполните следующие действия.

  1. Определите код, который должен выполняться неделимым блоком, и объект, для которого он должен выполняться. Подробные сведения см. в разделе Потокобезопасные компоненты.

  2. Установите блокировку для этого объекта и включите код в состав блокируемого фрагмента.

    Этот код теперь будет выполняться для заблокированного объекта неделимым блоком.

    SyncLock MyObject   ' This represents the start of the lock on MyObject.
    ' Insert code to be executed atomically on MyObject here.
    End SyncLock   ' This represents the end of the lock.
    
    lock (MyObject) 
       // All code inside the braces {} is executed with MyObject locked.
    {
       // Insert code to be executed atomically on MyObject here.
    }
    

См. также

Задачи

Пошаговое руководство. Разработка простого многопоточного компонента с использованием Visual Basic

Пошаговое руководство. Разработка простого многопоточного компонента с помощью Visual C#

Ссылки

BackgroundWorker

Основные понятия

Потокобезопасные компоненты

Обзор асинхронной модели, основанной на событиях

Другие ресурсы

Многопоточность в компонентах