亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ipc.cpp

?? Linux 下的線程池的源代碼。很好用!
?? CPP
字號(hào):
/***********************************************************************Role:The file define all the IPC class such as mutex,Semaphore etc.  **CopyRight(C):                                                        **                                                                     ***********************************************************************/#ifndef _IPC_H_#define _IPC_H_#include "comhead.h"#include <pthread.h>#include <semaphore.h>#include <sys/sem.h>#include <sys/msg.h>#include <sys/ipc.h>#include <sys/types.h>#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)#define DIR_MODE  (FILE_MODE|S_IXUSR|S_IXGRP|S_IXOTH)/************************************************************************** * The CSyncObject class is a pure virtual class that provides            *  * functionality common to the synchronization objects in Win32.          * * The Microsoft Foundation Class Library provides several classes        * * derived from CSyncObject. These are                                    * * CEvent, CMutex, CCriticalSection, and CThreadSemaphore.                      * *************************************************************************/// Classes declared in this fileclass CSyncObject;    class CThreadSemaphore;    class CThreadMutex;    //class CCriticalSection;//class CSingleLock;//class CMultiLock;class CCondition;char* IPCNAME(const char* pCharName){    char *dir="/tmp",*dst,*slash;    if(( dst = (char*)malloc( PATH_MAX )) == NULL )	return NULL;	    if( dir[strlen(dir)-1] == '/')	slash = "";    else	slash = "/";    snprintf(dst,PATH_MAX,"%s%s%s",dir,slash,pCharName);    return dst;}key_t GetIpcKey(const char* m_KeyName){   return ftok(m_KeyName,0x53); }class CSyncObject{public:    CSyncObject( ){}    virtual ~CSyncObject( ){}     virtual int Lock  ( ) = 0;    virtual int Unlock( ) = 0;};/************************************************************************** * All the IPC class such as CThreadxxx is only used in a process ,       *  * So they only is used for thread sync,if you want to sync between       * * server process,or server thread in different process ,you should use   * * the another IPC class such CProcessxxx                                 * *************************************************************************/class CThreadMutex : public CSyncObject{    friend class CCondition;protected:    pthread_mutex_t      m_Mutex;    pthread_mutexattr_t  m_MutexAttr;public:    CThreadMutex( ){        pthread_mutexattr_init( &m_MutexAttr );        pthread_mutex_init( &m_Mutex, &m_MutexAttr );    }    virtual ~CThreadMutex( ){        pthread_mutexattr_destroy( &m_MutexAttr );        pthread_mutex_destroy( &m_Mutex );    }        pthread_mutex_t* GetMutex( ) { return &m_Mutex; }    virtual int Lock   ( ) { return pthread_mutex_lock   ( &m_Mutex ); }    virtual int Unlock ( ) { return pthread_mutex_unlock ( &m_Mutex ); }    virtual int Trylock ( ) { return pthread_mutex_trylock ( &m_Mutex ); }};class CCondition{protected:    pthread_cond_t      m_Cond;    CThreadMutex	m_Mutex;public:    CCondition ( ) { pthread_cond_init   ( &m_Cond, NULL ); }    virtual ~CCondition( ) { pthread_cond_destroy( &m_Cond ); }    void Wait( ){ 	pthread_cond_wait( &m_Cond, m_Mutex.GetMutex());    }    void Signal   ( ) { pthread_cond_signal( &m_Cond )   ; }    void Broadcast( ) { pthread_cond_broadcast( &m_Cond ); }};class CThreadSemaphore : CSyncObject{protected:    int			m_CurValue;//the number that current used!    int			m_MaxValue ;    CThreadMutex	m_Mutex;    CCondition		m_Cond;private:     void Init( int maxvalue );public:    CThreadSemaphore(){}    CThreadSemaphore ( int maxvalue = 1 ){ Init( maxvalue ); }    virtual ~CThreadSemaphore( ) { }    int GetCurValue( ) const { return m_CurValue; }    int GetMaxValue( ) const { return m_MaxValue; }        virtual int  Lock( );    virtual int  Unlock( );};void CThreadSemaphore::Init( int maxvalue ){    m_Mutex.Lock( );    m_CurValue = 0;    m_MaxValue = maxvalue;    m_Mutex.Unlock( );    m_Cond.Signal( );}int CThreadSemaphore::Lock( ){    m_Mutex.Lock( );    while( m_CurValue >= m_MaxValue)	m_Cond.Wait( );    m_CurValue++;    m_Mutex.Unlock( );    m_Cond.Signal( );    return m_CurValue;}int CThreadSemaphore::Unlock( ){    m_Mutex.Lock( );    while ( m_CurValue <= 0 )	m_Cond.Wait( );    m_CurValue--;    m_Mutex.Unlock( );    m_Cond.Signal( );    return m_CurValue;}/************************************************************************** * All the IPC class such as CProcessxxx can be  used in different        * * processes , or different thread between processed. If you only         *  * want to snyc between different thread in same process,you can use      * * the class CThreadxxx                                                   * *************************************************************************/class CProcessMutex : public CSyncObject{protected:    int		   m_Semap;        struct sembuf  m_SemBuf;    union semun {	int 	val;	struct semid_ds *buf; 	USHORT	*array;    }   m_Semun;    int		   m_Value;	public:    CProcessMutex( ){    	m_Semap = semget(GetIpcKey("IPCNAME"),1,IPC_CREAT);    }    CProcessMutex(char* m_pMutexName ){   	assert(m_pMutexName != NULL);    	m_Semap = semget(GetIpcKey(m_pMutexName),1,IPC_CREAT);    }    virtual ~CProcessMutex( ){}    virtual int Lock( ) ;    virtual int Unlock( );    };int CProcessMutex::Lock( ){   m_SemBuf.sem_num  = 0;   m_SemBuf.sem_op   = -1;   m_SemBuf.sem_flg = SEM_UNDO;   semop(m_Semap,&m_SemBuf,1); }int CProcessMutex::Unlock( ){   m_SemBuf.sem_num  = 0;   m_SemBuf.sem_op   = 1;   m_SemBuf.sem_flg = SEM_UNDO;       semop(m_Semap,&m_SemBuf,1); }/************************************************************************** * The class CSingleLock and CMultiLock is used for both thread and       *  * process.                                                               * * server process,or server thread in different process ,you should use   * * the another IPC class such CProcessxxx                                 * *************************************************************************//***************CSingleLock******************************/class CSingleLock{public:    CSingleLock(CSyncObject* pObject, int bInitialLock = 0);    ~CSingleLock( ){ delete m_pObject;}    int    Lock( );    int    Unlock( );    int    IsLocked( ){ return m_IsLock ; }protected:    CSyncObject* m_pObject;    int    m_IsLock; };CSingleLock::CSingleLock(CSyncObject* pObject ,int bInitialLock){    assert(pObject != NULL);    m_pObject = pObject;        if(bInitialLock == 0)	Lock( );}int CSingleLock::Lock( ){    assert (m_pObject != NULL);    m_pObject->Lock( );     m_IsLock = 1;    return m_IsLock;}int CSingleLock::Unlock( ){    assert (m_pObject != NULL);    m_pObject->Unlock( );     m_IsLock = 0;    return m_IsLock;}/***************CMultiLock******************************//*class CMultiLock{public:    CMultiLock(CSyncObject* ppObjects[], DWORD dwCount, BOOL bInitialLock = FALSE);public:    DWORD Lock(DWORD dwTimeOut = INFINITE, BOOL bWaitForAll = TRUE,		DWORD dwWakeMask = 0);    BOOL Unlock();    BOOL Unlock(LONG lCount, LPLONG lPrevCount = NULL);    BOOL IsLocked(DWORD dwItem);public:    ~CMultiLock();protected:    HANDLE  m_hPreallocated[8];    BOOL    m_bPreallocated[8];    CSyncObject* const * m_ppObjectArray;    HANDLE* m_pHandleArray;    BOOL*   m_bLockedArray;    DWORD   m_dwCount;};*/#endifmain(){    printf("%s\n",IPCNAME("test"));    printf("%d\n",GetIpcKey("test"));}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人h动漫精品一区二区| 69堂国产成人免费视频| 欧美性生活大片视频| 精品少妇一区二区| 亚洲自拍与偷拍| 国产成人在线色| 欧美伊人久久久久久久久影院 | 精品成人佐山爱一区二区| 国产精品久久久久毛片软件| 轻轻草成人在线| 不卡电影免费在线播放一区| 精品成人一区二区三区| 午夜欧美2019年伦理| aaa国产一区| 国产婷婷一区二区| 狠狠色狠狠色综合| 日韩午夜在线观看视频| 亚洲国产日韩在线一区模特| 风流少妇一区二区| 久久精品人人做| 精品一区二区三区免费观看| 51午夜精品国产| 五月激情综合网| 欧美剧在线免费观看网站| 亚洲精品成人精品456| 成人h精品动漫一区二区三区| 亚洲国产精品av| 国产在线精品一区二区夜色| 91精品在线一区二区| 首页国产丝袜综合| 欧美一区二区三区在| 丝袜亚洲精品中文字幕一区| 91成人看片片| 亚洲电影一区二区三区| 色综合久久中文综合久久牛| 亚洲天堂中文字幕| 色偷偷久久人人79超碰人人澡| 最新欧美精品一区二区三区| 色综合久久久久综合体桃花网| 亚洲精品乱码久久久久久黑人| 色综合天天视频在线观看| 亚洲人午夜精品天堂一二香蕉| 95精品视频在线| 夜色激情一区二区| 欧美丰满一区二区免费视频| 久久99这里只有精品| 26uuu亚洲综合色| 国产91在线看| 亚洲男人天堂一区| 欧美美女网站色| 精品一二三四区| 国产精品乱人伦中文| 色成人在线视频| 日韩国产成人精品| 久久日韩精品一区二区五区| 99久久er热在这里只有精品15| 一区二区三区四区激情| 日韩一区二区三区视频在线| 国产91高潮流白浆在线麻豆| 成人免费视频在线观看| 欧美精品粉嫩高潮一区二区| 久久精品国产一区二区三 | 国产成人av电影免费在线观看| 国产精品网站一区| 欧美日韩精品三区| 国产精品99久久久久| 洋洋成人永久网站入口| 精品国产乱码91久久久久久网站| 成人综合婷婷国产精品久久 | 欧美区视频在线观看| 国产美女精品一区二区三区| 国产精品美女久久久久aⅴ | 欧美国产一区在线| 欧美日韩日日摸| 国产精品1区2区| 午夜精品久久久久久| 国产日韩欧美精品在线| 欧美日韩中文国产| 国产精品自拍av| 日韩电影在线免费| 国产精品久久一级| 日韩精品一区二区三区老鸭窝| 不卡av免费在线观看| 免费在线观看一区| 亚洲三级在线看| 久久精品日产第一区二区三区高清版 | 亚洲成人www| 国产精品福利一区| 欧美一级片在线| 欧美性猛片aaaaaaa做受| 成人精品视频一区二区三区| 麻豆国产欧美一区二区三区| 亚洲图片欧美色图| 亚洲男人的天堂网| 国产精品污www在线观看| 日韩欧美在线不卡| 欧美另类高清zo欧美| 色系网站成人免费| 色综合欧美在线视频区| 成人美女在线视频| 国产成人精品网址| 国产一区二区三区免费观看| 免费久久精品视频| 日韩专区在线视频| 婷婷一区二区三区| 亚洲1区2区3区视频| 亚洲综合av网| 亚洲欧美二区三区| 自拍偷拍亚洲综合| 国产精品美女久久久久aⅴ| 国产欧美日韩在线视频| 久久夜色精品国产欧美乱极品| 日韩欧美一区在线观看| 制服.丝袜.亚洲.中文.综合| 在线免费观看日本一区| 日本乱码高清不卡字幕| 色婷婷国产精品久久包臀| 91香蕉视频在线| 91久久线看在观草草青青| 色拍拍在线精品视频8848| 97aⅴ精品视频一二三区| 91小视频在线| 欧美日韩日日夜夜| 欧美一区二区免费| 精品国产青草久久久久福利| 精品欧美乱码久久久久久1区2区| 日韩精品专区在线| 久久伊人蜜桃av一区二区| 久久久亚洲精品一区二区三区 | 一区二区三区自拍| 亚洲福利视频三区| 日韩精品成人一区二区在线| 免费成人在线影院| 国产精品一区免费在线观看| 国产毛片精品视频| 97aⅴ精品视频一二三区| 欧美中文字幕一二三区视频| 欧美精品久久久久久久多人混战 | www国产精品av| 欧美国产日韩亚洲一区| 自拍偷拍欧美激情| 日日摸夜夜添夜夜添亚洲女人| 六月丁香婷婷色狠狠久久| 成人综合在线网站| 欧美视频中文字幕| 精品久久五月天| 亚洲欧洲日韩一区二区三区| 亚洲图片欧美视频| 国产麻豆精品一区二区| 91美女视频网站| 日韩你懂的在线观看| 久久精品免视看| 性欧美疯狂xxxxbbbb| 国产黄色成人av| 欧美高清视频一二三区 | 久久精品久久综合| 免费欧美在线视频| 精品一区二区国语对白| www.亚洲精品| 精品伦理精品一区| 一区二区三区在线视频观看58| 欧美激情资源网| 欧洲另类一二三四区| 精品国产一区a| 亚洲福利视频一区二区| 麻豆精品蜜桃视频网站| 91亚洲精品一区二区乱码| 欧美一区二区三区四区高清| 国产欧美一区二区在线观看| 午夜不卡av免费| 99精品视频在线观看| 精品伦理精品一区| 亚洲成人一区二区| youjizz久久| 久久综合九色综合97婷婷| 亚洲福中文字幕伊人影院| 97久久精品人人澡人人爽| 欧美成人女星排行榜| 亚洲一区二区精品久久av| 成人免费高清在线| 久久综合丝袜日本网| 日本aⅴ亚洲精品中文乱码| 欧美影院一区二区| 亚洲欧美激情在线| www.亚洲激情.com| 国产精品美女久久久久久久久| 国产综合色精品一区二区三区| 欧美一区二区在线看| 婷婷丁香久久五月婷婷| 欧美性生活久久| 亚州成人在线电影| 精品视频在线看| 午夜精品久久久久久不卡8050| 欧美性极品少妇| 亚洲国产精品久久久久秋霞影院| 91免费国产在线观看| 亚洲丝袜另类动漫二区| 91网站在线播放| 亚洲欧美视频在线观看视频| 91污在线观看|