Ricerca…


introduzione

In C11 c'è una libreria di thread standard, <threads.h> , ma nessun compilatore conosciuto che lo implementa. Pertanto, per utilizzare il multithreading in C è necessario utilizzare implementazioni specifiche della piattaforma come la libreria di thread POSIX (spesso denominata pthreads) utilizzando l'intestazione pthread.h .

Sintassi

  • thrd_t // Tipo di oggetto completo definito dall'implementazione che identifica una discussione
  • int thrd_create (thrd_t * thr, thrd_start_t func, void * arg); // Crea una discussione
  • int thrd_equal (thrd_t thr0, thrd_t thr1); // Controlla se gli argomenti si riferiscono allo stesso thread
  • thr_t thrd_current (void); // Restituisce l'identificatore del thread che lo chiama
  • int th_sleep (const struct timespec * duration, struct timespec * restante); // Sospende l'esecuzione del thread di chiamata per almeno un determinato periodo
  • void thrd_yield (void); // Permette ad altri thread di essere eseguiti al posto del thread che lo chiama
  • _Noreturn void thrd_exit (int res); // Termina il thread il thread che lo chiama
  • int thrd_detatch (thrd_t thr; // Stacca un dato thread dall'ambiente corrente
  • int thrd_join (thrd_t thr, int * res); // Blocca il thread corrente fino al termine del thread specificato

Osservazioni

L'utilizzo dei thread può introdurre comportamenti non definiti extra come http://www.Scriptutorial.com/c/example/2622/data-race . Per l'accesso senza mtx_lock() alle variabili condivise tra diversi thread C11 fornisce la funzionalità mutex mtx_lock() o i tipi di dati (opzionali) http://www.riptutorial.com/c/topic/4924/atomics e le funzioni associate in stdatomic.h .

Esempio di thread C11 semplice

#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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow