Ich habe ein großes Problem, ich kann nicht herausfinden, warum Mutexe in C nicht so funktionieren, wie ich es erwarte. Dies ist mein Code:POSIX C-Threads. Mutex-Beispiel. Funktioniert nicht wie erwartet
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
pthread_t mythread;
pthread_mutex_t mymutex;
void *anotherFunc(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("anotherFunc\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
void *func(void*)
{
pthread_mutex_lock(&mymutex);
for(int i = 0; i < 100; i++)
printf("func\n");
pthread_mutex_unlock(&mymutex);
pthread_exit(NULL);
}
int main(int argc, char *argv[])
{
pthread_mutex_init(&mymutex, NULL);
pthread_create(&mythread, NULL, func, NULL);
pthread_create(&mythread, NULL, anotherFunc, NULL);
pthread_mutex_destroy(&mymutex);
pthread_exit(NULL);
return EXIT_SUCCESS;
}
Was ich passieren erwarten, dass das Programm zunächst 100 „Func“ -Nachrichten und dann 100 „anotherFunc“ -Nachrichten zu drucken. Was ich erwarte, ist die Ausführung, um func zu erreichen und den Mutex zu sperren. Wenn die Ausführung anotherFunc erreicht, erwarte ich zu warten, bis Func den Mutex freigibt. Aber ich bekomme gestörter Nachrichten wie
func func func anotherFunc anotherFunc anotherFunc func anotherFunc
Ich verstehe nicht, wie dieses Ding funktioniert. Bitte helfen Sie!
verwenden ich denke, es funktioniert :) Diese meine letzte Code ist für alle interessierten ... http://pastebin.me/bc23773578d79a55882d7ced4e04b026 –
Immer noch gebrochen. Sie stellen nur sicher, dass * ein * Thread beendet ist, wenn Sie den Mutex zerstören. Was ist, wenn der andere noch nicht fertig ist? Es gibt keine Garantie, dass der Thread startet, den Mutex erwirbt oder in einer bestimmten Reihenfolge endet, es sei denn, Sie erzwingen es irgendwie. (Lektion eins von Multithreading ist dies: Dinge sind nur in einer bestimmten Reihenfolge gesichert, wenn Sie sie in dieser Reihenfolge erzwingen.) –
Ja, aber ich habe beide Funktionen in einem Thread gestartet, der einzige Thread: mythread. Ist es in Ordnung, oder es ist immer sicherer, einen Thread für eine Funktion zu verwenden? –