Операционные системы. Замятин А.В - 59 стр.

UptoLike

Составители: 

59
Функция pthread_testcancel создает точку возможного досрочного
завершения потока (точку отмены). Такие точки необходимы для кор-
ректного завершения потока, т. к. даже если досрочное завершение раз-
решено, поток, получивший запрос на досрочное завершение, часто мо-
жет завершить работу не сразу. Если поток находится в режиме отло-
женного досрочного завершения (именно этот режим установлен по
умолчанию), он выполнит запрос на досрочное завершение, только дос-
тигнув одной из точек отмены. Сигнатура функции pthread_testcancel
void pthread_testcancel()
В соответствии со стандартом POSIX точками отмены являются
вызовы многих «обычных» функций, например open, pause и write.
Тем не менее, выполнение потока может быть прервано принуди-
тельно, не дожидаясь точек отмены. Для этого необходимо перевести
поток в режим немедленного завершения, что делается с помощью вы-
зова функции
pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL)
Вызов функции
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, NULL)
снова переводит поток в режим отложенного досрочного завершения.
3.1.4. Синхронизация потоков
При выполнении нескольких потоков во многих случаях необхо-
димо синхронизировать их взаимодействие. Существует несколько спо-
собов синхронизации потоков:
взаимные исключения мьютексы (Mutex MUTial EXclusion);
переменные состояния;
семафоры.
Механизм использования переменных состояния и семафоров в
многопоточных приложениях аналогичен механизму использования
этих методов синхронизации в многопроцессных приложениях.
Механизм мьютексов представляет общий метод синхронизации
выполнения потоков. Мьютекс можно определить как объект синхрони-
зации, который устанавливается в особое сигнальное состояние, когда
не занят каким-либо потоком. В любой момент мьютексом может вла-
деть только один поток.
Использование мьютексов гарантирует, что только один поток в
некоторый момент времени выполняет критическую секцию кода.
Мьютексы можно использовать и в однопоточном коде.