Архитектура современных операционных систем
51 Потоки в UNIX В некоторых версиях Unix поддерживается многопоточность. При этом существует два подхода к реализации потоков: на уровне пользователя или на уровне ядра. На пользовательском уровне потоки реализуются с помощью модулей DLL, какой либо среды выполнения. Так было по началу сделано в BSD. Реали- зация не требовала изменения в ядре, но подход имеет недостаток: ядро не зна- ет о многопоточности, поэтому если поток процесса блокируется в ожидании операции ввода/вывода, то остальные потоки процесса также блокируются. Поэтому наиболее предпочтительной является реализация потоков на уровне ядра, хотя она и более трудоемкая. Стандарт POSIX определяет набор функций или системных вызовов для работы с потоками, однако в нем умалчивается о типе их реализации: 1) функция создания потока Pthread_create(tid, attr, function, arg). Эта функция создает в контексте текущего процесса новый поток, кото- рый будет выполнять функцию, определяемую аргументом function, и при ее вызове функции будут переданы аргументы, указанные в параметре arg. После создания потока в параметре tid функция возвращает уникальный идентифика- тор созданного потока. Параметр attr может использоваться для задания харак- теристик создаваемого потока, например, приоритета планирования. 2) функция pthread_exit используется для завершения потока. Для завер- шения потока с ожиданием завершения всего процесса может использоваться еще одна функция pthread_join. По этой функции завершаемый поток блокиру- ется, пока не будут завершены остальные потоки процесса. Для синхронизации выполнения потоков POSIX рекомендует использо- вать мютексы и переменные состояния. Мютекс создается с помощью функции pthread_mutex_init, а уничтожает- ся с помощью pthread_mutex_destroy.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTY0OTYy