Linux - статьи

Функции для работы с потоками


Для работы с потоками существуют следующие основные функции:

  • pthread_create(pthread_t *tid, const pthread_attr_t *attr, void*(*function)(void*), void* arg) - создает поток для выполнения функции function. В качестве параметра для потоковой функции передается указатель arg. Индентификатор нового потока возвращается через tid. Поток создается с параметрами attr.
  • pthread_mutex_init(pthread_mutex_t* lock, pthread_mutexattr_t *attr) - инициализирует взаимоисключающую блокировку. attr - содержит аттрибуты для взаимоисключающей блокировки. В случае, если attr == NULL, используются установки по умолчаниию.
  • pthread_mutex_destroy(pthread_mutex_t* lock) - удаляет взаимоисключающую блокировку.
  • pthread_mutex_lock(pthread_mutex_t* lock) - устанавливает блокировку. В случае, если блокировка была установлена другим процессом, текущий процесс останавливается до снятия блокировки другим процессом.
  • pthread_mutex_unlock(pthread_mutex_t* lock) - снимает блокировку.
  • pthread_join(pthread_t tid, void **statusp) - ожидает завершение неотсоединенного процесса, результат возвращаемый функцией сохраняется в statusp.
  • pthread_detach(pthread_t tid) - отсоединяет процесс. Это же можно задать при создании процесса, установив аттрибут detachstate вызовом pthread_attr_setdetachstate.
  • pthread_exit(void *status) - завершает процесс, статус передается вызову pthread_join, подобен exit(). Но вызов exit() в процессе приведет к завершению всей программы.

Процесс завершается двумя путями - вызовом pthread_exit() или завершением потоковой функции. В случае, если процесс неотсоединен, то при его завершении ресурсы, выделенные процессу, не освобождаются до вызова pthread_join(). Если процесс отсоединенный - ресурсы освобождаются по ее завершению.



Содержание раздела