Articles of multithreading

Fil bloqué en attente d’un signal

Depuis mon application, j’essaie d’attraper un signal spécifique qui est SIGUSR1. J’ai écrit le code ci-dessous pour résoudre ce problème, dans lequel l’application créera un fil pour “init_signal_catcher”. Le problème est que lorsque je lance le code, le programme se met en veille pour toujours et ne répond à aucun signal, même s’il s’agit de […]

C: Comment passer en sécurité et correctement plusieurs arguments à un pthread?

Considérons ce code simple: void* threadFunction(void* arg) { int argument=(int)arg; printf(“%d recieved\n”, argument); return NULL; } int main(int argv, char* argc[]) { int error; int i=0; pthread_t thread; int argument_to_thread=0; if ((error=pthread_create(&thread, NULL, threadFunction, (void*)argument_to_thread))!=0) { printf(“Can’t create thread: [%s]\n”, strerror(error)); return 1; } pthread_join(thread, NULL); return 0; } Cela fonctionne, mais deux choses me […]

avertissement: la fonction ‘noreturn’ retourne

Je fais une bibliothèque de threads (changer de contexte avec uncontext.h). Ma fonction est de type void, et je ne peux pas revenir. Mais même si je ne reviens pas, cet avertissement apparaît lors de la compilation: dccthread.c: In function ‘dccthread_init’: dccthread.c:184:1: warning: ‘noreturn’ function does return [enabled by default] } Ceci est un code […]

L’efficacité de l’accélération multi-threads est assez différente sous Android 4.4 et 5.0

J’ai écrit un fragment de code C pour effectuer un traitement d’image (calcul intensif) sous Android (compilé par NDK et utilisé par jni.h). Pour accélérer le traitement de l’image, j’ai utilisé les fonctions pthread_create et pthread_join dans le code C afin d’utiliser 4 threads pour traiter l’image simultanément. L’accélération de plusieurs threads a réussi dans […]

macos – le thread de macOS PTHREAD_CANCEL_ASYNCHRONOUS ne fonctionne pas

J’utilise le code suivant: #include #include #include pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; void clean(void *arg) { printf(“thread clean: %ld\n”, (unsigned long)arg); } void* thread_template(void *arg) { pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); pthread_cleanup_push(clean, (void*)pthread_self()); printf(“thread: %ld\n”, (unsigned long)pthread_self()); while ( 1 ) {} pthread_cleanup_pop(0); pthread_exit((void*)0); } int main(int argc, char const *argv[]) { pthread_t tid; pthread_create(&tid, NULL, thread_template, […]

Découvrez le nombre de cœurs de processeur à l’aide de threads

J’ai une mission dans laquelle je dois écrire un programme en C sous Linux (j’utilise CentOS), qui utilise des threads / processus pour déterminer le nombre de cœurs de la CPU. J’ai d’abord essayé d’imprimer l’heure actuelle en millisecondes / microsecondes, car je sais qu’il est possible d’exécuter 1 thread / core (ou 2 avec […]

Multiplication masortingcielle à l’aide de pthreads

J’essaye de faire la multiplication de masortingce en utilisant pthreads et en créant un thread pour chaque calcul de chaque ligne au lieu de chaque élément. Supposons qu’il existe deux masortingces A [M] [K], B [K] [N]. Où vais-je mal? int A[M][K]; int B[K][N]; int C[][]; void *runner (void *param); struct v { int i; […]

Passer des threads à une valeur d’une boucle for

J’essaie de créer des threads et de transmettre à chaque thread la valeur d’une boucle for. Voici le segment de code pthread_t *threadIDs; int i = 0; if(impl == 1) { threadIDs = (pthread_t *)malloc(sizeof(pthread_t)*reduces); for(;i < reduces; i++) { pthread_create(&threadIDs[i], NULL, reduce,&i); } } Il ne s’agit pas de transmettre les valeurs correctes de […]

Problèmes d’implémentation d’un serveur UDP multithread (threadpool?)

J’écris actuellement un streamer audio (client-serveur) (C / C ++) et j’ai décidé de créer un serveur UDP multi-thread pour ce projet. La logique derrière cela est que chaque client sera traité dans son propre thread. Les problèmes que je rencontre sont l’interférence des fils entre eux. La première chose que fait mon serveur est […]

Passer un int en tant que 4ème argument de pthread_create en C

int threadreader(void* pos) { int a, v; char *f; v = (long int) *pos; f = (char *)malloc(sizeof(SIZEFICHEIRO)); a = randomnum(4); f = pickfile(a, f); return reader (v, f); } int main(){ int i, pos, extra, retval,safe; pthread_t thread[K]; for (i = 0; i < K; i++) { pos = i * L/K * SIZECADEIA; […]