Операционные системы. Программирование в операционной среде Windows
26 Вызов SwitchToThread аналогичен вызову Sleep с передачей в dwMiniseconds нулевого значения. Разница в том, что SwitchToThread дает возможность выполнять потоки с более низким приоритетом, которым не хватает процессорного времени. 2.7. Синхронизация потоков с помощью критических секций Windows лучше всего работает, когда все потоки могут заниматься своим делом, не взаимодействуя друг с другом. Однако такая ситуация очень редка. Потоки взаимодействуют друг с другом в двух основных случаях: - совместно используя разделяемый ресурс, чтобы не разрушить его; - когда необходимо уведомлять другие потоки о некотором событии, например завершении каких-либо операций. В этих случаях я&о6ходдма, синхронизация потоков - это согласование работы потоков во времени. Синхронизация возможна в пользовательском режиме или с использованием ОЯ. Для синхронизации потоков в пользовательском режиме используются критические секции. Критическая секция (critical section) - это участок программы, где необходим монопольный доступ к обш,ему ресурсу, например, некоторой переменной, строке, массиву и т.д. Она позволяет сделать так, чтобы единовременно только один поток получал доступ к этому ресурсу. Для каждого разделяемого ресурса нужно объявить критическую секцию CRITICAL SECTION. Обычно структуры CRITICAL SECTION создаются как глобальные переменные, доступные всем потокам процесса. В элементах этой структуры записывается информация о том, какой поток пользуется ресурсом. Элементы структуры CRITICALSECTION необходимо инициализировать до обраш,ения какого-либо потока к заш,иш,енному ресурсу вызовом: VOID InitializeCriticalSection(PCRITICAL_SECTION pes); Например, глобально объявить критическую секцию, а в функции main инициализировать ее: CRITICAL_SECTION g_cs; InitializeCriticalSection(&g_cs); Если известно, что структура CRITICAL SECTION больше не понадобится ни одному потоку, можно удалить ее, вызвав функцию DeleteCriticalSection: VOID DeleteCriticalSection(PCRITICAL_SECTION pes);
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy