recherche
Maisondéveloppement back-endTutoriel C#.NetFramework multi-threading C (2) : Mutex mutex et Sem sémaphore

L'exclusion mutuelle et les sémaphores sont les deux fondements de la programmation multi-thread. Je n'entrerai pas dans les détails de leurs principes. Veuillez lire le livre du système d'exploitation ou vérifier en ligne.

Pour la mise en place de l'exclusion mutuelle, quel que soit le système d'exploitation, trois étapes sont indispensables

Initialiser le verrouillage mutex

Opération de verrouillage

Opération de déverrouillage

Pour différents systèmes, il n'y a que quelques différences dans les fonctions implémentées, mais les fonctions sont en réalité similaires. Lors des opérations de verrouillage et de déverrouillage, la plupart des systèmes disposent d'un mécanisme de délai d'attente pour garantir qu'ils ne sont pas toujours verrouillés. un certain temps. À cet endroit, par souci de simplicité du framework, nous n'avons pas défini de délai d'attente. Si nous ne pouvons pas obtenir le verrou pendant l'opération de verrouillage, nous attendrons là pour toujours.

Nous décrivons la classe de base de Mutex comme suit

class CMutex  
{  
    public:  
        CMutex(const char *pName = NULL);  //初始化锁  
        ~CMutex();  
        virtual bool Lock()=0;       //锁操作,纯虚函数  
        virtual bool UnLock()=0;  //解锁操作,纯虚函数  
        const char * getName(void) const {  
                return mutex_name;  
            }  
    protected:  
        char       *mutex_name;  //锁名字  
};


Pour la mise en œuvre de chaque système, trois opérations d'initialisation, de verrouillage et de déverrouillage sont nécessaires En partie, sous Linux, ces trois opérations sont très simples, je ne posterai donc pas le code ici.

De même, pour le sémaphore Sem, la mise en œuvre de chaque système est similaire, rien de plus que

Initialisation du sémaphore

Envoi du sémaphore (sémaphore 1)

Réception du sémaphore (Sémaphore -1)


La classe de base Sem est décrite comme suit

class CCountingSem  
{  
    public:  
        typedef enum {  
                 kTimeout,  
             kForever  
            }Mode;                      
        CCountingSem();     //初始化信号量  
        ~CCountingSem();  
         virtual bool Get() = 0;  //接收信号量  
             virtual bool  Post(void) = 0;   //发送信号量 
 };


De même, je ne publierai pas le code pour l’implémentation spécifique.


Bien sûr, pour un système qui satisfait au modèle de conception, lors de la création d'un nouveau mutex et d'un sémaphore, vous ne pouvez bien sûr pas créer directement ces classes, vous devez les renvoyer via un projet simple. , ajoutez les méthodes newMutex et newCountingSem dans la classe COperatingSystemFactory et renvoyez les entités correspondantes via le jugement du système d'exploitation par COperatingSystemFactory.

class COperatingSystemFactory  
{  
    public:  
        static COperatingSystem *newOperatingSystem();  
        static CCountingSem  *newCountingSem(unsigned int init=0); //参数是信号量的初始值,一般为0  
        static CMutex   *newMutex(const char *pName=NULL); 
 };


D'accord, avec le mutex et le sémaphore, comment l'utiliser dans la fonction principale, on peut d'abord demander le verrouillage mutex et le sémaphore, si on commence ? beaucoup de threads, et si un verrou mutex est nécessaire entre certains d'entre eux, alors nous attribuerons le verrou mutex appliqué au thread correspondant, et nous pourrons ensuite l'utiliser directement. Comme pour chaque classe de thread, vous l'avez écrite vous-même et vous l'avez simplement héritée de CThread. Il va sans dire que les variables membres à l'intérieur sont liées au verrouillage mutex demandé dans main. Vous pouvez également le définir sur une affectation publique. utilisez la fonction définie en privé, tout dépend de vous.


Avec le mutex et le sémaphore, la file d'attente des messages peut être démarrée. Avec la file d'attente des messages, le modèle multi-thread le plus simple est complété.


adresse github :

https://github.com/wyh267/Cplusplus_Thread_Lib

Ce qui précède est le framework multi-threading C (2) :Exclusion mutuelle Mutex et contenu du sémaphore Sem Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration
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
C # et le runtime .net: comment ils fonctionnent ensembleC # et le runtime .net: comment ils fonctionnent ensembleApr 19, 2025 am 12:04 AM

C # et .NET Runtime travaillent en étroite collaboration pour permettre aux développeurs de pouvoir de développer des capacités de développement efficaces, puissantes et multiplateformes. 1) C # est un langage de programmation de type et orienté objet conçu pour intégrer de manière transparente avec le framework .NET. 2) Le .NET Runtime gère l'exécution du code C #, fournit une collecte de déchets, des services de sécurité et d'autres services et assure une opération efficace et multiplateforme.

C # .NET DÉVELOPPEMENT: A Guide du débutant pour commencerC # .NET DÉVELOPPEMENT: A Guide du débutant pour commencerApr 18, 2025 am 12:17 AM

Pour démarrer le développement C # .NET, vous devez: 1. Comprendre la connaissance de base de C # et les concepts principaux du .NET Framework; 2. Maître les concepts de base des variables, des types de données, des structures de contrôle, des fonctions et des classes; 3. Apprenez les fonctionnalités avancées de C #, telles que LINQ et la programmation asynchrone; 4. Soyez familier avec les techniques de débogage et les méthodes d'optimisation des performances pour les erreurs courantes. Avec ces étapes, vous pouvez progressivement pénétrer le monde de C # .NET et écrire des applications efficaces.

C # et .NET: Comprendre la relation entre les deuxC # et .NET: Comprendre la relation entre les deuxApr 17, 2025 am 12:07 AM

La relation entre C # et .NET est inséparable, mais ce ne sont pas la même chose. C # est un langage de programmation, tandis que .NET est une plate-forme de développement. C # est utilisé pour écrire du code, compiler dans le langage intermédiaire de .NET (IL) et exécuté par .NET Runtime (CLR).

La pertinence continue de C # .net: un regard sur l'utilisation actuelleLa pertinence continue de C # .net: un regard sur l'utilisation actuelleApr 16, 2025 am 12:07 AM

C # .NET est toujours important car il fournit des outils et des bibliothèques puissants qui prennent en charge le développement d'applications multiples. 1) C # combine .NET Framework pour rendre le développement efficace et pratique. 2) Le mécanisme de collecte de la sécurité et des ordures de C # améliore ses avantages. 3) .NET fournit un environnement de course multiplateforme et des API riches, améliorant la flexibilité du développement.

Du Web au bureau: la polyvalence de C # .netDu Web au bureau: la polyvalence de C # .netApr 15, 2025 am 12:07 AM

C # .NETtisversatileforbothwebandDeskTopDevelopment.1) forweb, useasp.netfordynamicapplications.2) fordesktop, employwindowsformSorwpfforrichInterfaces.3) usexamarinforcross-plateformDevelopment, permanant les codéescosswindows, macos, linux, etmobiledevices.

C # .NET et l'avenir: s'adapter aux nouvelles technologiesC # .NET et l'avenir: s'adapter aux nouvelles technologiesApr 14, 2025 am 12:06 AM

C # et .NET s'adaptent aux besoins des technologies émergentes à travers des mises à jour et des optimisations continues. 1) C # 9.0 et .NET5 introduire le type d'enregistrement et l'optimisation des performances. 2) .netcore améliore le support natif et conteneurisé cloud. 3) ASP.Netcore s'intègre aux technologies Web modernes. 4) ML.NET prend en charge l'apprentissage automatique et l'intelligence artificielle. 5) La programmation asynchrone et les meilleures pratiques améliorent les performances.

C # .NET vous convient-il? Évaluer son applicabilitéC # .NET vous convient-il? Évaluer son applicabilitéApr 13, 2025 am 12:03 AM

C # .NeTissuitableFormenterprise-LevelApplications withithemicrosofosystématetoitsstrongThpyping, RichLibrary, androbustperformance.wowever, itmayNotBeidealForcross-PlatformDevelopmentorwhenRawpeediscritical, whileLanguageSlikerUstorGomightBeferable.

C # code dans .NET: Explorer le processus de programmationC # code dans .NET: Explorer le processus de programmationApr 12, 2025 am 12:02 AM

Le processus de programmation de C # dans .NET comprend les étapes suivantes: 1) l'écriture de code C #, 2) la compilation dans un langage intermédiaire (IL) et 3) l'exécution par .NET Runtime (CLR). Les avantages de C # dans .NET sont sa syntaxe moderne, son système de type puissant et son intégration serrée avec le Framework .NET, adapté à divers scénarios de développement des applications de bureau aux services Web.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

Listes Sec

Listes Sec

SecLists est le compagnon ultime du testeur de sécurité. Il s'agit d'une collection de différents types de listes fréquemment utilisées lors des évaluations de sécurité, le tout en un seul endroit. SecLists contribue à rendre les tests de sécurité plus efficaces et productifs en fournissant facilement toutes les listes dont un testeur de sécurité pourrait avoir besoin. Les types de listes incluent les noms d'utilisateur, les mots de passe, les URL, les charges utiles floues, les modèles de données sensibles, les shells Web, etc. Le testeur peut simplement extraire ce référentiel sur une nouvelle machine de test et il aura accès à tous les types de listes dont il a besoin.

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Puissant environnement de développement intégré PHP