Hallo Leute!
Ich wunder mich gerade über das vorgehen meiner Thread Synchronisation mit kritischen Bereichen.
So wie ich das sehe müsste er beim oben beim zweiten lock() hängen! Da er ja schon gelockt ist. Also ein Deadlock.
Beim unteren Beispiel wirft er eine Exception. (Beim zweiten .unlock() )
Dahrer => Warum funktioniert das oberer Beispiel, und warum gibt es beim unteren eine Exception?
Habe ich was nicht beachtet?
So wie ich das sehe ist die Exception berechtigt und beim zweiten lock() sollte er blockieren. Das tut er aber nicht. Daher ist der Sinn doch nicht erfüllt oder? In C++ verhält sich das irgendwie anders :bahnhof:
Gruß
Happyman0815
Ich wunder mich gerade über das vorgehen meiner Thread Synchronisation mit kritischen Bereichen.
Java:
//Declaration
final Lock mutex = new ReentrantLock();
final Lock mutex_recv = new ReentrantLock();
//Worüber ich mich wundere:
// Folgendes "funktioniert":
mutex.lock();
mutex.lock();
// Folgendes "funktioniert" nicht (exception):
mutex.unlock();
mutex.unlock();
So wie ich das sehe müsste er beim oben beim zweiten lock() hängen! Da er ja schon gelockt ist. Also ein Deadlock.
Beim unteren Beispiel wirft er eine Exception. (Beim zweiten .unlock() )
Dahrer => Warum funktioniert das oberer Beispiel, und warum gibt es beim unteren eine Exception?
Habe ich was nicht beachtet?
So wie ich das sehe ist die Exception berechtigt und beim zweiten lock() sollte er blockieren. Das tut er aber nicht. Daher ist der Sinn doch nicht erfüllt oder? In C++ verhält sich das irgendwie anders :bahnhof:
Gruß
Happyman0815
Zuletzt bearbeitet: