Maison > Java > javaDidacticiel > Les réveils parasites en Java sont-ils un mythe ?

Les réveils parasites en Java sont-ils un mythe ?

Mary-Kate Olsen
Libérer: 2024-11-03 06:56:30
original
438 Les gens l'ont consulté

Are Spurious Wakeups in Java a Myth?

Les réveils parasites en Java existent-ils ?

Le concept de « réveils parasites » en Java a suscité de nombreuses discussions, amenant certains à remettre en question leur occurrence réelle.

Quelles sont les causes des réveils parasites ?

Les réveils parasites, par définition, manquent de déclencheurs évidents, mais une cause possible réside dans les signaux système, en particulier sous Linux. Comme l'explique l'article de Wikipédia, l'implémentation par Linux de pthread_cond_wait() à l'aide de l'appel système futex peut entraîner un réveil parasite lorsqu'un processus reçoit un signal. Étant donné que chaque appel système bloquant renvoie avec EINTR sur un signal, il est possible que pthread_cond_wait() rate un véritable réveil en dehors de l'appel futex. Pour éviter cette condition de concurrence critique, l'appelant doit rechercher un invariant. Par conséquent, tout signal POSIX peut induire un réveil parasite.

Exemple

Considérez le code suivant :

<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>
Copier après la connexion

Dans ce scénario, un signal parasite le réveil peut être simulé en envoyant un signal au processus, provoquant un réveil prématuré de son thread en attente.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal