Szukaj…


Wprowadzenie

W C11 istnieje standardowa biblioteka wątków <threads.h> , ale nie ma znanego kompilatora, który jeszcze ją implementuje. Tak więc, aby używać wielowątkowości w C, musisz używać specyficznych dla platformy implementacji, takich jak biblioteka wątków POSIX (często nazywana pthreads), używając nagłówka pthread.h .

Składnia

  • thrd_t // Zdefiniowany przez implementację pełny typ obiektu identyfikujący wątek
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Tworzy wątek
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // Sprawdź, czy argumenty odnoszą się do tego samego wątku
  • thr_t thrd_current (void); // Zwraca identyfikator wątku, który go wywołuje
  • int thrd_sleep (const struct timespec * czas trwania, struct timespec * pozostały); // Zawieś wykonywanie wątku wywołania przez co najmniej określony czas
  • void thrd_yield (void); // Zezwól na uruchamianie innych wątków zamiast wątku, który je wywołuje
  • _Noreturn void thrd_exit (int res); // Kończy wątek wątek, który go wywołuje
  • int thrd_detatch (thrd_t thr; // Odłącza dany wątek od bieżącego środowiska
  • int thrd_join (thrd_t thr, int * res); // Blokuje bieżący wątek, dopóki dany wątek się nie zakończy

Uwagi

Korzystanie z wątków może wprowadzić dodatkowe niezdefiniowane zachowanie, takie jak http://www.riptutorial.com/c/example/2622/data-race . W celu zapewnienia bez wyścigu dostępu do zmiennych, które są współużytkowane przez różne wątki, C11 zapewnia funkcjonalność mtx_lock() lub (opcjonalnie) http://www.riptutorial.com/c/topic/4924/atomics typy danych i powiązane funkcje w stdatomic.h .

C11 Wątki prosty przykład

#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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow