0Pricing
C Academy · Урок

Создание и управление потоками

Используйте потоки POSIX (pthread) для создания и управления потоками в C

«Создание и управление потоками» — бесплатный урок C Academy на CoddyKit. Это урок 2 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C Academy содержит 3 уроков всего.

Создание потоков и управление ими

Создание потоков и управление ими

При использовании многопоточности мы создаём несколько потоков для одновременного выполнения задач.

В этом уроке Вы узнаете:

  • Как создавать несколько потоков в C.
  • Как ожидать завершения потоков.
  • Как передавать аргументы потокам.
Создание и управление потоками — иллюстрация 1

Создание нескольких потоков

Создание нескольких потоков

Для создания нескольких потоков используется pthread_create().

Синтаксис:

pthread_create(&thread, NULL, function, argument);

Каждый поток выполняется независимо, но использует общую память с другими потоками.

Пример: создание нескольких потоков

Пример: создание нескольких потоков

Эта программа создаёт несколько потоков, которые выполняются одновременно.

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

void *printMessage(void *arg) {
    printf("Thread %d: Hello from thread!\n", *(int*)arg);
    return NULL;
}

int main() {
    pthread_t threads[3];
    int thread_ids[3] = {1, 2, 3};

    for (int i = 0; i < 3; i++) {
        pthread_create(&threads[i], NULL, printMessage, &thread_ids[i]);
    }

    for (int i = 0; i < 3; i++) {
        pthread_join(threads[i], NULL);
    }
    return 0;
}

Ожидание завершения потоков

Ожидание завершения потоков

Используйте pthread_join(), чтобы дождаться завершения потока.

Синтаксис:

pthread_join(thread, NULL);

Без pthread_join() главный поток может завершиться до того, как завершатся остальные потоки.

Передача аргументов потокам

Передача аргументов потокам

Аргументы можно передать функции потока с помощью указателя.

Пример:

pthread_create(&thread, NULL, function, (void*)&value);

Функция потока преобразует аргумент обратно к его исходному типу.

Пример: передача аргументов потокам

Пример: передача аргументов потокам

Эта программа демонстрирует передачу аргументов функции потока.

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

void *printNumber(void *arg) {
    int num = *(int*)arg;
    printf("Thread received number: %d\n", num);
    return NULL;
}

int main() {
    pthread_t thread;
    int value = 10;
    pthread_create(&thread, NULL, printNumber, &value);
    pthread_join(thread, NULL);
    return 0;
}

Завершение потока

Завершение потока

Используйте pthread_exit(), чтобы явно завершить поток.

Пример:

pthread_exit(NULL);

При необходимости главная функция также должна вызвать pthread_exit().

Рекомендации по управлению потоками

Рекомендации по управлению потоками

Чтобы эффективно управлять потоками:

  • Всегда используйте pthread_join(), чтобы избежать преждевременного завершения.
  • Передавайте аргументы с помощью указателей, чтобы избежать повреждения данных.
  • Сведите к минимуму конфликты при доступе к общим ресурсам.

Итоги

Итоги

В этом уроке Вы узнали:

  • Как создавать несколько потоков с помощью pthread_create().
  • Как ожидать завершения потоков с помощью pthread_join().
  • Как передавать аргументы потокам.
  • Как безопасно завершать поток.

Далее мы рассмотрим синхронизацию и состояния гонки в многопоточности!

Создание и управление потоками — иллюстрация 10

Часто задаваемые вопросы

Урок «Создание и управление потоками» бесплатный?

Да — полный текст урока «Создание и управление потоками» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C Academy, подпишись на CoddyKit PRO. Курс C Academy содержит 3 уроков всего.

Чему я научусь в уроке «Создание и управление потоками»?

Используйте потоки POSIX (pthread) для создания и управления потоками в C Ты практикуешь C Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать C Academy?

Предыдущий опыт не требуется. C Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 3.

Сколько времени занимает урок «Создание и управление потоками»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке C Academy?

Да. Каждый урок C Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Знакомство с потоками
  2. Создание и управление потоками
  3. Синхронизация и состояния гонки
← Назад к C Academy