C Language
multithreading
Zoeken…
Invoering
In C11 is er een standaardthreadbibliotheek, <threads.h>
, maar geen bekende compiler die deze nog implementeert. Om multithreading in C te gebruiken, moet u dus platformspecifieke implementaties gebruiken, zoals de POSIX- pthread.h
(vaak pthreads genoemd) met behulp van de pthread.h
header.
Syntaxis
- thrd_t // Implementatie-gedefinieerd compleet objecttype dat een thread identificeert
- int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Creëert een thread
- int thrd_equal (thrd_t thr0, thrd_t thr1); // Controleer of argumenten naar dezelfde thread verwijzen
- thr_t thrd_current (void); // Retourneert de ID van de thread die deze aanroept
- int thrd_sleep (const struct timespec * duur, struct timespec * resterend); // Onderbreek de uitvoering van de gespreksdraad gedurende ten minste een bepaalde tijd
- void thrd_yield (void); // Laat andere threads lopen in plaats van de thread die het aanroept
- _Noreturn void thrd_exit (int res); // Beëindigt de thread de thread die deze aanroept
- int thrd_detatch (thrd_t thr; // Maakt een bepaalde thread los van de huidige omgeving
- int thrd_join (thrd_t thr, int * res); // Blokkeert de huidige thread totdat de gegeven thread is voltooid
Opmerkingen
Het gebruik van threads kan extra ongedefinieerd gedrag introduceren, zoals een http://www.riptutorial.com/c/example/2622/data-race . Voor race-vrije toegang tot variabelen die worden gedeeld tussen verschillende threads biedt C11 de mtx_lock()
mutex-functionaliteit of de (optionele) http://www.riptutorial.com/c/topic/4924/atomics gegevenstypen en bijbehorende functies in stdatomic.h
.
C11 Threads eenvoudig voorbeeld
#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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow