Articles of multithreading

Des barrières de mémoire sont-elles nécessaires pour la référence atomique comptant des données immuables partagées?

J’aimerais gérer certaines structures de données immuables à l’aide de compteurs de références, en les partageant entre les threads d’un système SMP. Voici à quoi ressemble le code de version: void avocado_release(struct avocado *p) { if (atomic_dec(p->refcount) == 0) { free(p->pit); free(p->juicy_innards); free(p); } } atomic_dec t- atomic_dec besoin d’une barrière de mémoire? Si oui, […]

Conséquences sur les performances d’un grand nombre de mutex

Supposons que j’ai un tableau de 1 000 000 d’éléments et un nombre de threads de travail, chacun manipulant des données dans ce tableau. Les threads de travail peuvent mettre à jour des éléments déjà remplis avec de nouvelles données, mais chaque opération est limitée à un seul élément de tableau et est indépendante des […]

Après le retour de execvp, pourquoi mon programme ne reprend-il pas où il s’est arrêté?

J’ai un bloc de code comme celui-ci qui fonctionne en tant que thread enfant: if(someVar == 1){ doSomeStuff; _exit(0) } else execvp(*(temp->_arguments), temp->_arguments); printf(“I’m done\n”); Lorsque j’exécute le programme avec someVar == 1, je comprends que l’appel _exit (0) tue mon thread. Cependant, lorsqu’il est défini sur 0, pourquoi le programme ne continue-t-il pas après […]

Code intermédiaire résultant des pragmas OpenMP

Existe-t-il un moyen de mettre la main sur le code source intermédiaire produit par les pragmas OpenMP? Je voudrais voir comment chaque type de pragmas est traduit. À votre santé.

Vérifier l’état du fil tout en le laissant dans un état d’attente

Je me demande s’il est possible de vérifier le statut d’un thread, qui pourrait éventuellement être dans un état d’attente mais ne doit pas nécessairement l’être et s’il est dans un état d’attente, j’aimerais le laisser dans cet état. Fondamentalement, comment puis-je vérifier le statut d’un thread sans changer son état (en attente). Par waitable, […]

Comment implémenter des files d’attente sécurisées pour les threads

J’avais déjà utilisé la bibliothèque multithreading auparavant en Python, mais c‘est la première fois que j’essaie de threader en C. Je veux créer un pool de travailleurs. À leur tour, ces travailleurs sont supposés pousser ou sortir de la queue. #include #include #include #define NUMTHREADS 20 /* number of threads to create */ typedef struct […]

Comment puis-je passer l’index d’une boucle for comme argument de pthread_create

J’utilise une boucle for pour créer un certain nombre de threads et passe l’index i comme argument comme suit: pthread_t p[count]; for (int i = 0; i < count; i++){ pthread_create(&p[i], NULL, &somefunc, (void*)&i); } Ensuite, je tente de récupérer la valeur de i: void *somefunc (void* ptr){ int id = *(int*)ptr; } Cependant, j’ai […]

boucles nestedes, parallélisation de boucle interne, réutilisation de threads

Clause de non-responsabilité: l’exemple suivant n’est qu’un exemple factice pour comprendre rapidement le problème. Si vous pensez à un problème du monde réel, pensez à toute programmation dynamic. Le problème: nous avons une masortingce n * m et nous voulons copier les éléments de la ligne précédente comme dans le code suivant: for (i = […]

L’utilisation de sémaphores dans cette solution est-elle correcte?

Problème: je dois incrémenter les variables x1 et x2, ce qui devrait être fait par des threads séparés. L’incrément suivant des deux variables ne devrait pas être appelé tant que l’incrément précédent des deux variables n’est pas terminé. Solution proposée: initialisez 4 sémaphores et appelez des threads distincts pour une incrémentation distincte de la variable. […]

Un signal envoyé avec kill à un thread parent est-il garanti d’être traité avant la prochaine instruction?

Bon, donc si je suis sous un thread enfant sur Linux (en utilisant pthreads si ça compte), et que je lance la commande suivante kill(getpid(), someSignal); il enverra le signal donné au parent du thread actuel. Ma question: est-il garanti que le parent obtiendra immédiatement le processeur et traitera le signal (tuer l’application s’il s’agit […]