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