Partager via


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 sur le même objet de synchronisation, ce qui rend possible la synchronisation entre processus.

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 Objets d’événements.
Mutex Peut être détenu par 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 objets Mutex.
Sémaphore Conserve un nombre compris entre zéro et une valeur maximale, limitant le nombre de threads qui accèdent simultanément à une ressource partagée. Pour plus d’informations, consultez Objets sémaphores.
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 objets du minuteur d’attente.

 

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

Objet 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 un répertoire ou une arborescence de répertoires spécifié. Pour plus d’informations, consultez Obtention de notifications de modification d’annuaire.
Entrée de console Créé lors de la création d’une console. Le handle à l’entrée de la console est retourné par la fonction CreateFile lorsque CONIN$ est spécifié, ou par la fonction GetStdHandle. Son état est défini sur signalé lorsqu’il n’y a pas d’entrée lus dans la mémoire tampon d’entrée de la console et défini sur non signé lorsque la mémoire tampon d’entrée est vide. Pour plus d’informations sur les consoles, consultez Character-Mode Applications
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 de ressource 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.
Processus Créé en appelant la fonction CreateProcess. Son état est défini sur non signé pendant que le processus est en cours d’exécution et défini sur signalé lorsque le processus se termine. Pour plus d’informations sur les processus, consultez processus et threads.
Fil Créé lorsqu’un thread est créé en appelant leCreateProcess, CreateThreadou fonction 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 en tant qu’objet de synchronisation ; toutefois, leur utilisation à cet effet est déconseillée. Au lieu de cela, utilisez des E/S asynchrones et attendez l’ensemble d’objets d’événement dans la structure OVERLAPPED. 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 superposées simultanées sont effectuées sur le même fichier, le canal nommé ou l’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 sortie superposées.