Sök…


Introduktion

I C11 finns ett standard trådbibliotek, <threads.h> , men ingen känd kompilator som ännu implementerar det. För att använda multithreading i C måste du alltså använda plattformspecifika implementationer som POSIX-trådbiblioteket (ofta kallad pthreads) med hjälp av pthread.h huvudet.

Syntax

  • thrd_t // Implementeringsdefinierad komplett objekttyp som identifierar en tråd
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Skapar en tråd
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // Kontrollera om argument hänvisar till samma tråd
  • thr_t thrd_current (ogiltigt); // Returnerar identifieraren för tråden som kallar den
  • int thrd_sleep (const struct timespec * varaktighet, struct timespec * kvar); // Avbryt körning av samtalstråd under minst en viss tid
  • void thrd_yield (void); // Tillåt att andra trådar körs i stället för tråden som kallar den
  • _Noreturn void thrd_exit (int res); // Avslutar tråden tråden som kallar den
  • int thrd_detatch (thrd_t thr; // Tar bort en viss tråd från den aktuella miljön
  • int thrd_join (thrd_t thr, int * res); // Blockerar den aktuella tråden tills den givna tråden är klar

Anmärkningar

Att använda trådar kan introducera extra odefinierat beteende som en http://www.riptutorial.com/c/example/2622/data-race . För rasfri tillgång till variabler som delas mellan olika trådar ger C11 mtx_lock() mutex-funktionalitet eller (valfritt) http://www.riptutorial.com/c/topic/4924/atomics datatyper och tillhörande funktioner i stdatomic.h .

C11 Trådar enkelt exempel

#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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow