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