Какое определение у потока в стандарте POSIX

Ответ

В стандарте POSIX (POSIX Threads, pthreads) поток (thread) — это базовая единица выполнения внутри процесса. Процесс может состоять из одного или нескольких потоков, которые выполняются псевдо-параллельно или параллельно на многоядерных системах.

Ключевое отличие потоков от процессов заключается в разделении ресурсов.

Что потоки разделяют (общие ресурсы):

  • Адресное пространство (сегменты кода, данных и куча)
  • Открытые файлы и сокеты
  • Идентификаторы пользователя и группы (UID, GID)

Что у каждого потока свое (уникальные ресурсы):

  • Идентификатор потока (Thread ID)
  • Счетчик команд (Program Counter)
  • Набор регистров процессора
  • Стек (для локальных переменных и адресов возврата)
  • Состояние (running, ready, blocked)

Пример на C с использованием pthreads:

#include <pthread.h>
#include <stdio.h>
#include <unistd.h>

// Функция, которая будет выполняться в новом потоке
void* thread_function(void* arg) {
    printf("Я новый поток! Сплю 2 секунды...n");
    sleep(2);
    printf("Новый поток завершает работу.n");
    return NULL;
}

int main() {
    pthread_t thread_id;
    printf("Основной поток: создаю новый поток.n");

    // Создание нового потока, который выполнит thread_function
    pthread_create(&thread_id, NULL, thread_function, NULL);

    // Ожидание завершения созданного потока
    pthread_join(thread_id, NULL);

    printf("Основной поток: новый поток завершился, программа окончена.n");
    return 0;
}

Такая модель позволяет эффективно выполнять задачи, требующие параллельной обработки данных, но накладывает на разработчика ответственность за синхронизацию доступа к общим ресурсам (с помощью мьютексов, семафоров и т.д.).