Synchronisieren von zwei mit pthreads mutex in C
Brauche Hilfe mit dem synchronisieren von zwei threads mit mutex. Iam neu in C und Mutexe und Im nicht sicher, was hier zu tun ist. Der code hat zwei threads, zählt bis zehn und druckt jede Zahl, die aber nicht synchron, so wird es nicht drucken synchronisiert, es ist die Hälfte synchronisiert. Bedeutet, dass ich nur ärger zu bekommen am Ende, manchmal druckt er 8..9..11, 8..9..10..10 und so weiter.
Kann ich keine änderungen an den raw-code, wenn Sie nehmen die Linien über Mutexe, das ist der raw-code. Ich kann nur hinzufügen, Zeilen über Mutexe.
#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;
}
- bitte posten Sie alle Ihre code
undefined reference to 'writeloop'
- Sorry, fixierte den code jetzt. Bitte versuchen Sie es erneut 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit der Bedingung, die außerhalb Ihrer mutex können Sie nicht empfangen die richtigen Werte. Ein garantierter Weg, um sicherzustellen, die Schleife arbeitet in-order wäre die folgende änderung
writeloop
:while (g_ant < 10)
Zustand wieder zurück, wenn Sie wollte, dass es "minimal"...g_ant
als 9 sperrt den mutex und an dieser Stelle thread B liestg_ant
9 und Blöcke auf den mutex. Eine macheng_ant
10 dann print-und entriegeln; B auch macheng_ant
10 dann print-und entriegeln. Denn es gibt keinen Schutz auf die Bedingung, die Sie haben keine Garantie, es wird nicht für ungültig erklärt werden, durch einen anderen thread, bevor/während/nachdem Sie es gelesen.