Articles of multithreading

Implémentations de Spin Lock (OSSpinLock)

Je commence tout juste à étudier la programmation multi-thread et la sécurité des threads. Je suis familier avec l’attente chargée et, après un peu de recherche, je suis maintenant familiarisé avec la théorie des verrous verrouillables; Cela se résume à la fonction suivante (définie dans objc-os.h): static inline void ARRSpinLockLock(ARRSpinLock *l) { again: /* … […]

Fermeture du thread à l’aide de ExitThread – C

J’ai un programme simple qui crée un fil, boucle vingt fois, puis appelle pour se fermer et effectuer le nettoyage nécessaire. Lorsque je débogue le programme, il atteint le ExitThread (); méthode et les pauses, en ignorant le printf (); Je me suis installé après pour me signaler qu’il est fermé. Est-ce normal ou est-ce […]

Se bloquer en exécutant des multithreads (pthread sous Windows)

J’espère que vous pourrez m’aider dans mes ennuis. Mon programme fait quelque chose que je ne comprends pas vraiment. L’objective du programme est donné comme suit: Créez deux threads (task_timer et task_read). Ces threads doivent afficher sur la sortie standard (stdout) le message suivant: “Tache 1 Tache 2 Tache 1 Tache 2 …” Code: static […]

Erreur de segmentation utilisant getcontext () dans la bibliothèque de threads

J’essaie d’implémenter une bibliothèque de threads au niveau utilisateur en C à l’aide d’appels système tels que get context, swap context, etc. J’ai un bloc de contrôle de fil qui ressemble à ceci: struct tcb { int thread_id; int thread_pri; ucontext_t *thread_context; struct tcb *next; } Et j’ai une fonction appelée init () qui ressemble […]

Java est volatile en C?

Je suis conscient de l’utilisation de volatile en Java. C’est-à-dire (d’après l’ article de Wikipédia ): Il y a un ordre global sur les lectures et écrit dans une variable volatile. Cela implique que chaque thread qui accède à un champ volatile lira sa valeur actuelle avant de continuer, au lieu d’utiliser (potentiellement) une valeur […]

Comment autoriser deux threads à partager une variable globale dans WinAPI?

J’ai deux threads créés à l’aide de CreateThread () , et j’ai une variable globale qu’un thread écrit, et l’autre lit à partir de. D’après ce que j’ai compris, le compilateur et / ou le processeur peuvent effectuer toutes sortes d’optimisations, ce qui peut signifier par exemple que lorsque j’écris une valeur dans la variable, […]

Traitement correct de GetLastError (et autres) dans un contexte multithread

Est-il correct de supposer que GetLastError (et ses variantes) sont par thread ou par processus? Les problèmes liés à chaque processus sont quelque peu évidents dans les applications multithreads, car rien ne permet de garantir qu’aucun autre appel Win32 n’a été passé entre votre appel ayant échoué et GetLastError. Parfois, la valeur de GetLastError est […]

Plusieurs threads accédant à une variable

J’ai trouvé cette question dans un manuel que je lis. La solution est également donnée ci-dessous. J’ai du mal à comprendre comment le minimum pourrait être 2. Pourquoi un thread ne peut-il pas lire 0, tous les autres threads s’exécutent et écrit 1? Et que ce soit 1 ou 2, le fil écrit en dernier […]

Cet exemple contient-il une course de données?

Voici la question originale, mais les miennes ont quelques différences avec elle. Modèle de mémoire C ++ – Cet exemple contient-il une course de données? Ma question: //CODE-1: initially, x == 0 and y == 0 if (x) y++; // pthread 1 if (y) x++; // pthread 2 Remarque: le code ci-dessus est écrit en […]

comparaison atomique (différente) et échange

Je souhaite utiliser la comparaison et l’échange swap, mais au lieu d’être égal à, je ne souhaite permuter que si l’emplacement mémoire n’est pas égal à l’ancienne valeur. Est-ce possible en C?