C Language
multithreading
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