La synchronisation de deux pthreads utilisation de mutex dans C
Besoin d'aide avec la synchronisation de deux threads avec des mutex. Iam nouvelle C et les mutex et je ne suis pas sûr de quoi faire ici. Le code a deux fils qui, compte jusqu'à dix et imprime chaque numéro, mais n'est pas synchronisé, de sorte qu'il n'aura pas l'impression synchronisée, il est à moitié synchronisés. Signifie que je ne reçois que des ennuis à la fin, parfois, il imprime 8..9..11, 8..9..10..10 et ainsi de suite.
Je ne peut pas modifier le code brut, si vous enlevez les lignes à propos de mutex, qui est le code brut. Je peux seulement ajouter des lignes sur les mutex.
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
pthread_mutex_t mutex;
int g_ant = 0;
void *writeloop(void *arg) {
while(g_ant < 10) {
pthread_mutex_lock(&mutex);
g_ant++;
usleep(rand()%10);
printf("%d\n", g_ant);
pthread_mutex_unlock(&mutex);
}
exit(0);
}
int main(void)
{
pthread_t tid;
pthread_mutex_init(&mutex, NULL);
pthread_create(&tid, NULL, writeloop, NULL);
writeloop(NULL);
pthread_join(tid, NULL);
pthread_mutex_destroy(&mutex);
return 0;
}
- merci de poster tout votre code
undefined reference to 'writeloop'
- Désolé, fixe le code maintenant. Merci d'essayer de nouveau 🙂
Vous devez vous connecter pour publier un commentaire.
Avec la condition à l'extérieur de votre mutex vous ne pouvez pas recevoir les valeurs correctes. Un moyen sûr de s'assurer que la boucle fonctionne dans l'ordre serait le suivant changement de
writeloop
:while (g_ant < 10)
condition de retour à nouveau si vous le voulais "minimal"...g_ant
9 verrouille le mutex et à ce moment, le fil B litg_ant
9 et bloque sur le mutex. Une volonté de faireg_ant
10 puis imprimer et déverrouiller; B aussi faireg_ant
10 ensuite l'imprimer et de le déverrouiller. Car il n'y a pas de protection à la condition que vous n'avez aucune garantie qu'il ne sera pas invalidé par un autre thread avant/pendant/après l'avoir lu.