Heim > Java > javaLernprogramm > Sind falsche Wakeups in Java ein Mythos?

Sind falsche Wakeups in Java ein Mythos?

Mary-Kate Olsen
Freigeben: 2024-11-03 06:56:30
Original
438 Leute haben es durchsucht

Are Spurious Wakeups in Java a Myth?

Gibt es in Java „Spurious Wakeups“?

Das Konzept der „Spurious Wakeups“ in Java hat zahlreiche Diskussionen ausgelöst, die bei einigen dazu geführt haben, dass diese in Frage gestellt werden tatsächliches Auftreten.

Was verursacht falsche Wakeups?

Unechte Wakeups haben per Definition keine offensichtlichen Auslöser, aber eine mögliche Ursache sind Systemsignale, insbesondere unter Linux. Wie im Wikipedia-Artikel erläutert, kann die Linux-Implementierung von pthread_cond_wait() mithilfe des futex-Systemaufrufs zu einem falschen Aufwachen führen, wenn ein Prozess ein Signal empfängt. Da jeder blockierende Systemaufruf mit EINTR ein Signal zurückgibt, ist es möglich, dass pthread_cond_wait() außerhalb des Futex-Aufrufs ein echtes Aufwecken verpasst. Um diese Race-Bedingung zu vermeiden, muss der Aufrufer nach einer Invariante suchen. Folglich kann jedes POSIX-Signal ein falsches Aufwecken auslösen.

Beispiel

Betrachten Sie den folgenden Code:

<code class="java">public class Spurious {
    public static void main(String[] args) {
        Lock lock = new ReentrantLock();
        Condition cond = lock.newCondition();
        lock.lock();
        try {
            try {
                cond.await();
                System.out.println("Spurious wakeup!");
            } catch (InterruptedException ex) {
                System.out.println("Just a regular interrupt.");
            }
        } finally {
            lock.unlock();
        }
    }
}</code>
Nach dem Login kopieren

In diesem Szenario ein Spurious Das Aufwachen kann simuliert werden, indem ein Signal an den Prozess gesendet wird, wodurch der wartende Thread vorzeitig erwacht.

Das obige ist der detaillierte Inhalt vonSind falsche Wakeups in Java ein Mythos?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage