Objets de synchronisation

Un objet de synchronisation est un objet dont le handle peut être spécifié dans l’une des fonctions d’attente pour coordonner l’exécution de plusieurs threads. Plusieurs processus peuvent avoir un handle pour le même objet de synchronisation, ce qui rend possible la synchronisation interprocess.

Les types d’objets suivants sont fournis exclusivement pour la synchronisation.

Type Description
Événement Avertit un ou plusieurs threads en attente qu'un événement s'est produit. Pour plus d’informations, consultez Event Objects.
Mutex Ne peut appartenir qu’à un seul thread à la fois, ce qui permet aux threads de coordonner l’accès mutuellement exclusif à une ressource partagée. Pour plus d’informations, consultez Mutex Objects.
Semaphore Gère un nombre compris entre zéro et une valeur maximale, ce qui limite le nombre de threads qui accèdent simultanément à une ressource partagée. Pour plus d’informations, consultez Sémaphore Objects.
Minuteur pouvant être attendu Avertit un ou plusieurs threads en attente qu’une heure spécifiée est arrivée. Pour plus d’informations, consultez Waitable Timer Objects.

 

Bien que disponibles pour d’autres utilisations, les objets suivants peuvent également être utilisés pour la synchronisation.

Object Description
Notification de modification Créé par la fonction FindFirstChangeNotification , son état est défini sur signalé lorsqu’un type de modification spécifié se produit dans une arborescence de répertoires ou de répertoires spécifié. Pour plus d’informations, consultez Obtention de notifications de modification d’annuaire.
Entrée console Créé lors de la création d’une console. Le handle à l’entrée console est retourné par la fonction CreateFile lorsque CONIN$ est spécifié, ou par la fonction GetStdHandle . Son état est défini sur signalé en cas d’entrée non lus dans la mémoire tampon d’entrée de la console et sur non signé lorsque la mémoire tampon d’entrée est vide. Pour plus d’informations sur les consoles, consultez Applications en mode caractère
Travail Créé en appelant la fonction CreateJobObject . L’état d’un objet de travail est défini sur signalé lorsque tous ses processus sont arrêtés, car la limite de temps de fin de travail spécifiée a été dépassée. Pour plus d’informations sur les objets de travail, consultez Objets de travail.
Notification des ressources de mémoire Créé par la fonction CreateMemoryResourceNotification . Son état est défini sur signalé lorsqu’un type de modification spécifié se produit dans la mémoire physique. Pour plus d’informations sur la mémoire, consultez Gestion de la mémoire.
Process Créé en appelant la fonction CreateProcess . Son état est défini sur non signé pendant l’exécution du processus et défini sur signalé à l’arrêt du processus. Pour plus d’informations sur les processus, consultez Processus et threads.
Thread Créé lorsqu’un nouveau thread est créé en appelant la fonction CreateProcess, CreateThread ou CreateRemoteThread . Son état est défini sur non signé pendant que le thread est en cours d’exécution et défini sur signalé lorsque le thread se termine. Pour plus d’informations sur les threads, consultez Processus et threads.

 

Dans certaines circonstances, vous pouvez également utiliser un fichier, un canal nommé ou un appareil de communication comme objet de synchronisation ; toutefois, leur utilisation à cette fin est déconseillée. Au lieu de cela, utilisez les E/S asynchrones et attendez que l’objet d’événement défini dans la structure CHEVAUCHEMENT. Il est plus sûr d’utiliser l’objet d’événement en raison de la confusion qui peut se produire lorsque plusieurs opérations simultanées se chevauchent sur le même fichier, le même canal nommé ou le même appareil de communication. Dans ce cas, il n’existe aucun moyen de savoir quelle opération a provoqué le signal de l’état de l’objet.

Pour plus d’informations sur les opérations d’E/S sur les fichiers, les canaux nommés ou les communications, consultez Synchronisation et entrées et sorties qui se chevauchent.