Réponse courte: objets de minuterie sont pas utilisé pour synchroniser l'accès aux structures de données dans le noyau. Pour cela, le noyau NT a des choses comme le mutex rapide, le mutex gardé, le verrou push, l'objet mutex, etc. Je ne comprends pas très bien votre question - de quelles structures de données parlez-vous? Néanmoins, je continuerai en supposant que vous voulez savoir comment les objets minuterie peuvent être utilisés.
Vous pouvez utiliser des objets de minuterie de deux manières. Le premier est qu'ils sont signalés après un délai spécifié . Ainsi, un thread peut attendre sur un objet timer en utilisant KeWaitForSingleObject, et il ne se réveillera que lorsque l'heure normale sera arrivée. Vous pouvez également utiliser une signalisation périodique pour la minuterie - vous pourriez vouloir la réinitialiser à un état non signalé chaque fois qu'un thread est réveillé par elle, et être signalé toutes les quelques secondes.
La deuxième utilisation (moins fréquente) est que les objets de minuterie peuvent insérer des APC dans le thread qui définit le minuteur. Dans le cas où vous ne savez pas ce qu'est un APC - c'est un appel de procédure asynchrone. Si un thread exécute un alertable wait, un APC inséré interrompt l'attente et commence l'exécution. Bien sûr, les APC sont difficiles à utiliser, c'est pourquoi les gens aiment enregistrer les objets timer avec le pool de threads et il prend soin de gérer les callbacks (mais c'est un autre sujet).
Merci pour l'explication: Jetez un oeil ici: http://msdn.microsoft.com/en-us/library/aa490206.aspx Il est dit que les minuteurs sont utilisés comme des objets de synchronisation. Ou ai-je compris mal? –
Oui, ce sont des "objets de synchronisation" dans le sens où vous pouvez synchroniser l'exécution de plusieurs threads en les utilisant. Cependant, ils ne sont en aucun cas utilisés pour l'exclusion mutuelle ou le contrôle d'accès aux ressources dans le noyau NT. Pour cela, il y a des sémaphores, des événements et des portes (événements légers). – wj32