Есть ли способ заблокировать планировщик linux на конкретном pthread? - PullRequest
0 голосов
/ 29 января 2020

В VxWorks есть функция taskLock, которая предотвращает перепланирование задачи.

Вкл. Linux у нас есть хороший вентилятор блокировки как мьютекс и семафор, но функция VxWorks 'taskLock позволяет заданию отключать прерывание без взаимодействия с другими.

На данный момент я знаю, что могу использовать pthread_setcancel_state ( PTHREAD_CANCEL_DISABLE, NULL ), но функция, которую я ищу, выполняет немного больше. Больше чем просто отключение прерывания, функция taskLock полностью отключает переключение задач. Это дает вызывающей функции все ресурсы, которые есть у вызывающего процесса / родителя.

Способ управления * pthread Linux совершенно другой. Как лучше всего имитировать taskLock вызов на Linux с помощью pthreads?

Вот описание, приведенное в таблице:

Эта подпрограмма отключает переключение контекста задачи. Задача, которая вызывает эту подпрограмму, будет единственной задачей, которую разрешено выполнять, если только задача явно не откажется от ЦП, сделав себя более не готовой. Обычно этот вызов связан с taskUnlock (); вместе они окружают критическую часть кода. Эти блокировки вытеснения реализованы с помощью переменной подсчета, которая позволяет использовать вложенные блокировки вытеснения. Вытеснение не будет разблокировано до тех пор, пока taskUnlock () не будет вызываться столько раз, сколько taskLock ().

спасибо, что взглянули на это.

1 Ответ

0 голосов
/ 30 января 2020

Прямого аналога в пользовательском пространстве нет (задачи ядра могут отключить вытеснение), но этот эффект обычно достигается с помощью политики планирования в реальном времени (SCHED_FIFO или SCHED_RR) с более высоким приоритетом планирования, чем у других задач .

...