.. role:: blue :class: blue Режимы многопоточности ядра =========================== .. _Kernel_multithreading_modes: .. версия ядра: Режим многопоточности ядра управляет распараллеливанием операций ядра и механизмами потокобезопасности ядра. Он включает или отключает параллельность вычислений в ядре и включает или отключает механизмы, обеспечивающие потокобезопасность объектов и операций ядра (что важно при организации многопоточных вычислений в пользовательском приложении). Режим многопоточности ядра определен как перечисление **MbeMultithreadedMode** в файле *tool_multithreading.h*. Ядро может работать в следующих режимах: - **mtm_Off** – многопоточность ядра отключена. В этом режиме все операции выполняются последовательно. Механизм, обеспечивающий потокобезопасность объектов ядра, отключен. - **mtm_Standard** – в стандартном режиме многопоточности работает ограниченное распараллеливание операций ядра, а именно распараллеливаются только операции, обрабатывающие независимые данные. Механизм потокобезопасности объектов ядра отключен. - **mtm_SafeItems** – режим потокобезопасности объектов ядра. В этом режиме включается механизм многопоточного кэширования, но по-прежнему работает ограниченное распараллеливание операций ядра. Данный режим нужен для поддержки многопоточных вычислений в пользовательских приложениях. - **mtm_Items** – режим многопоточности объектов. В этом режиме включено полное распараллеливание операций ядра, то есть распараллеливаются операции, обрабатывающие как независимые, так и зависимые данные. Данный режим также может использоваться для поддержки многопоточных вычислений в пользовательских приложениях. - **mtm_Max** – включена максимальная многопоточность ядра. В настоящее время фактически совпадает с режимом **mtm_Items**. По умолчанию в ядре установлен режим **mtm_Max**. Ядро предоставляет интерфейсы для динамического изменения режима многопоточности ядра. Интерфейсы для динамического изменения режима многопоточности ядра объявлены в файле *mb_variables.h*. Для переключения между режимами многопоточности предназначены статические методы класса **Math**: - **bool Multithreaded()** – проверяет, включен ли режим :blue:`mtm_Standard` (работает ли распараллеливание). - **void SetMultithreaded( bool b )** – если b == false, устанавливает режим :blue:`mtm_Off` (отключает многопоточность). Если b == true, устанавливает режим :blue:`mtm_Standard` (включает ограниченную многопоточность). - **MbeMultithreadedMode MultithreadedMode()** – возвращает текущий режим многопоточности. - **bool CheckMultithreadedMode( MbeMultithreadedMode mode )** – проверяет, что текущий режим многопоточности не ниже **mode**. - **void SetMultithreadedMode( MbeMultithreadedMode mode )** – устанавливает режим многопоточности **mode**.