Pthread

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

POSIX Threads або Pthread — стандарт POSIX реалізації нитей виконання, який визначає API для створення та управління ними.

Бібліотеки, які реалізують цей стандарт та його функціі, звичайно називаються Pthreads (функції мають приставку «pthread_»). Найбільш широко використовуються для Unix-подібних операційних систем, таких як Linux чи Solaris, також існує реалізація для Microsoft Windows (Pthreads-w32)

Основні функції стандарту[ред.ред. код]

Pthreads визначає набір типів та функцій мовою програмування Сі. Заголовочний файл — pthread.h.

  • Типи даних:
    • pthread_t: дескриптор потоку
    • pthread_attr_t: набір атрибутів потоку
  • Функції управління потоками:
    • pthread_create(): створення потоку
    • pthread_exit(): завершення потоку
    • pthread_cancel(): відміна потоку
    • pthread_join(): блокування потоку до завершення іншого потоку, вказаного у виклиці функції
    • pthread_detach(): звільнити ресурси зайняті потоком (якщо потік виконується, звільнення ресурсів відбудеться після його завершення)
    • pthread_attr_init(): ініціалізація структури атрибутів потоку
    • pthread_attr_setdetachstate(): вказівка системі, що вона після завершення потоку може звільнити ресурси, зайняті потоком
    • pthread_attr_destroy(): звільнення пам'яті від структури атрибутів потоку (знищити дескриптор)
  • Функції синхронізації потоків:
    • pthread_mutex_init (), pthread_mutex_destroy (), pthread_mutex_lock (), pthread_mutex_trylock (), pthread_mutex_unlock (): за допомогою м'ютексів
    • pthread_cond_init(), pthread_cond_signal, pthread_cond_wait(): за допомогою умовних змінних

Приклад[ред.ред. код]

Приклад використання POSIX потоків.

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
 
#define THREADS_MAX 4
 
void *function(void *param)
{
       int id = (int)param;
       int i, loops = 10;
       for(i = 0; i < loops; i++)
       {
               printf("thread %d: loop %d\n", id, i);
       }
       pthread_exit(NULL);
}
 
int main(void)
{
       pthread_t threads[THREADS_MAX];
       int i;
       printf("pre-execution\n");
       for (i = 0; i < THREADS_MAX; i++)
       {
               pthread_create(&threads[i], NULL, function, (void *)i);
       }
       printf("mid-execution\n");
 
       for (i = 0; i < THREADS_MAX; i++)
       {
               pthread_join(threads[i], NULL);
       }
       printf("post-execution\n");
       return EXIT_SUCCESS;
}

Дивись також[ред.ред. код]

Посилання[ред.ред. код]