В VxWorks есть функция taskLock
, которая предотвращает перепланирование задачи.
Вкл. Linux у нас есть хороший вентилятор блокировки как мьютекс и семафор, но функция VxWorks 'taskLock
позволяет заданию отключать прерывание без взаимодействия с другими.
На данный момент я знаю, что могу использовать pthread_setcancel_state ( PTHREAD_CANCEL_DISABLE, NULL )
, но функция, которую я ищу, выполняет немного больше. Больше чем просто отключение прерывания, функция taskLock
полностью отключает переключение задач. Это дает вызывающей функции все ресурсы, которые есть у вызывающего процесса / родителя.
Способ управления * pthread Linux совершенно другой. Как лучше всего имитировать taskLock
вызов на Linux с помощью pthreads?
Вот описание, приведенное в таблице:
Эта подпрограмма отключает переключение контекста задачи. Задача, которая вызывает эту подпрограмму, будет единственной задачей, которую разрешено выполнять, если только задача явно не откажется от ЦП, сделав себя более не готовой. Обычно этот вызов связан с taskUnlock (); вместе они окружают критическую часть кода. Эти блокировки вытеснения реализованы с помощью переменной подсчета, которая позволяет использовать вложенные блокировки вытеснения. Вытеснение не будет разблокировано до тех пор, пока taskUnlock () не будет вызываться столько раз, сколько taskLock ().
спасибо, что взглянули на это.