旗下导航:搜·么
当前位置:网站首页 > .Net教程 > 正文

C++ 多线程框架 (2):Mutex 互斥和 Sem 信号量【C#.Net教程】,C++,Mutex 互斥,Sem 信号量

作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:74评论:0


导读:互斥和信号量是多线程编程的两个基本,其道理就不细致说了,人人去看看操纵体系的书或许网上查查吧。关于互斥的完成,无论什么操纵体系都离不开三个步骤初始化互斥锁锁操纵...
互斥和信号量是多线程编程的两个基本,其道理就不细致说了,人人去看看操纵体系的书或许网上查查吧。

关于互斥的完成,无论什么操纵体系都离不开三个步骤

初始化互斥锁

锁操纵

解锁操纵

关于差别的体系只是完成的函数有一些差别罢了,然则功用实在都迥然差别,在锁操纵和解锁操纵的时刻大部份体系都有超时机制在内里,来保证不会一向锁在某个处所,我们为了框架简朴,没有设置超时,举行锁操纵的时刻假如得不到锁,将一向守候在那里。

Mutex的基类我们形貌以下

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;  //锁名字  
};


关于每一个体系的完成,都须要完成初始化,锁操纵,解锁操纵三个部份,在linux下,这三个操纵都很简朴,就不在这里贴代码了。

一样,关于信号量Sem,每一个体系的完成也迥然差别,不过就是

初始化信号量

发送信号量(信号量+1)

吸收信号量(信号量-1)


Sem基类形貌以下

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


一样,详细完成就不贴代码了。


固然,关于一个满足设想形式的体系,新建互斥锁和信号量的时刻固然不能直接new这些类啦,必定还要经由过程简朴工程来返回,在COperatingSystemFactory类中增加newMutex和newCountingSem要领,经由过程COperatingSystemFactory对操纵体系的推断来返回响应的实体。

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


好了,有了互斥和信号量,怎样用呢,在main函数中,我们能够先请求好互斥锁和信号量,假如我们启了许多线程,假如某几个之间须要互斥锁,那我们将请求好的互斥锁赋值给响应的线程,就能够直接使用了。至于各个线程类,是你本身写的,只是继续自CThread罢了,内里的成员变量怎样和main中请求的互斥锁关联,这就不用说了吧,你把它设置成public赋值也行,设置从private用函数set也行,统统看你啦。


有了互斥锁和信号量,下面就能够起音讯行列了,有了音讯行列,一个最简朴的多线程模子也就完成了。


github地点:

https://github.com/wyh267/Cplusplus_Thread_Lib

以上就是C++ 多线程框架 (2):Mutex 互斥和 Sem 信号量的内容,更多相关内容请关注ki4网(www.ki4.cn)!

标签:C++Mutex 互斥Sem 信号量


欢迎 发表评论: