Ich frage im Grunde, ob ich eine Sperre in einer Methode erhalte und eine zweite Methode von dieser Methode aufrufen, wird die zweite exklusiven Speicherzugriff erhalten? Hier ist ein Beispielcode. Als Referenz kodiere ich in C mit Pthreads.Ruft der Aufruf einer Methode innerhalb einer Methode mit einer Sperre exklusiven Zugriff auf den Speicher auf?
int count = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
method1() {
pthread_mutex_lock(&mutex);
count++;
method2();
pthread_mutex_unlock(&mutex);
}
method2() {
printf("count = %d\n", count);
}
Also, wenn Thread A beginnt und method1 Anrufe (Erwerb der Sperre), würde ein Ruf von method2 innerhalb method1 noch Erinnerung ist noch da A gesperrt werden muss, die Mutex-Sperre? Also können keine anderen Threads die Anzahl ändern, während A sie noch druckt?
Kurze Antwort ist ja. Wenn jedoch ein anderer Thread auf Methode 2 zugreift, wird es keine Sperre geben. – MKR
@MKR Also, was ist der Sinn eines Schlosses? 'method2' ist sowieso ein * read * -Prozess. –
Wenn Sie nach der Mutex-Sperre fragen, ja, bleibt der Mutex gesperrt, bis der gesperrte Thread 'pthread_mutex_unlock' darauf aufruft. Dies ist jedoch nicht die gleiche Frage wie bei _ "Also können keine anderen Threads die Zählung ändern, während A sie noch druckt?" _ Das hängt ganz von der Gestaltung Ihres Codes ab. Thread-Synchronisation passiert nicht durch Magie, nur weil Sie einen Mutex verwenden. Wenn Sie einem anderen Thread sagen, dass er "count" ohne Thread-Synchronisation ändern soll, dann haben Sie Race Conditions. – yano