Maison > Java > javaDidacticiel > le corps du texte

Réveils parasites en Java : mythe ou réalité ?

Mary-Kate Olsen
Libérer: 2024-11-01 20:11:02
original
1011 Les gens l'ont consulté

Spurious Wakeups in Java: Myth or Reality?

Réveils parasites en Java : un mythe ou une réalité ?

Le concept de réveils parasites, où un thread est réveillé de manière inattendue d'un état d'attente sans raison apparente, a été un sujet de discussion dans la programmation Java. Cependant, la prévalence de ces événements dans la pratique a été remise en question.

Selon l'article de Wikipédia sur les réveils parasites, l'implémentation Linux de pthread_cond_wait(), qui est utilisée par Java, connaît ce comportement. Plus précisément, les signaux reçus par le processus peuvent conduire à des retours brusques du blocage des appels système avec EINTR. En raison de conditions de concurrence potentielles, le système peut ne pas détecter les réveils légitimes, ce qui entraîne des réveils parasites.

Pour illustrer cela, considérons le code Java 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

Pour induire artificiellement un faux réveil. réveillez-vous dans ce code sans compter sur des événements aléatoires, envoyez simplement un signal au processus exécutant le code. Sous Linux, cela peut être réalisé en utilisant la commande kill -CONT commande, où est l'ID du processus.

En conclusion, bien que la possibilité théorique de réveils parasites existe sous Linux en raison de l'implémentation de pthread_cond_wait(), leur apparition dans un environnement matériel/logiciel décent semble être sporadique. En tant que tel, les préoccupations concernant les réveils parasites ne devraient pas dissuader les développeurs d'utiliser des techniques de synchronisation appropriées telles que le verrouillage et les variables de condition.

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