Поиск…


Вступление

В C11 существует стандартная библиотека потоков, <threads.h> , но не известный компилятор, который ее реализует. Таким образом, чтобы использовать многопоточность в C, вы должны использовать специфичные для платформы реализации, такие как библиотека потоков POSIX (часто называемая pthreads), используя заголовок pthread.h .

Синтаксис

  • thrd_t // Определенный реализацией полный тип объекта, определяющий поток
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Создает поток
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // Проверяем, ссылаются ли аргументы на тот же поток
  • thr_t thrd_current (void); // Возвращает идентификатор потока, который его вызывает
  • int thrd_sleep (const struct timespec * duration, struct timespec * остается); // Приостановить выполнение потока вызовов в течение как минимум заданного времени
  • void thrd_yield (void); // Разрешить запуск других потоков вместо потока, который его вызывает
  • _Noreturn void thrd_exit (int res); // Завершает поток поток, который его вызывает
  • int thrd_detatch (thrd_t thr; // Отделяет данный поток от текущей среды
  • int thrd_join (thrd_t thr, int * res); // Блокирует текущий поток до тех пор, пока данный поток не завершится

замечания

Использование потоков может привести к дополнительным неопределенным поведением, таким как http://www.riptutorial.com/c/example/2622/data-race . Для расы , свободной от доступа к переменным , которые являются общими между различными потоками С11 обеспечивает mtx_lock() функциональность мьютекса или (опционально) http://www.riptutorial.com/c/topic/4924/atomics типов данных и связанных с ними функций в stdatomic.h .

Простой пример C11 Threads

#include <threads.h>
#include <stdio.h>

int run(void *arg)
{
    printf("Hello world of C11 threads.");

    return 0;
}

int main(int argc, const char *argv[])
{
    thrd_t thread;
    int result;

    thrd_create(&thread, run, NULL);

    thrd_join(&thread, &result);

    printf("Thread return %d at the end\n", result);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow