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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ipc.h

?? Linux 下的線程池的源代碼。很好用!
?? H
字號:
/***********************************************************************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 = "/";    //slash = (dir[strlen(dir)-1] == '/' ? "":"/");    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_mutex_destroy( &m_Mutex );        pthread_mutexattr_destroy( &m_MutexAttr );    }        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 value );public:    CThreadSemaphore ( int maxvalue = 1 ){ Init( maxvalue ); }    virtual ~CThreadSemaphore( ) { }    int GetCurValue( ) const { return m_CurValue; }    int GetMaxValue( ) const { return m_MaxValue; }        virtual int  Lock  ( )    {	m_Mutex.Lock( );	while( m_CurValue >= m_MaxValue)	    m_Cond.Wait( );	m_CurValue++;	m_Mutex.Unlock( );	m_Cond.Signal( );    }    virtual int  Unlock( )    {	m_Mutex.Lock( );	while ( m_CurValue <= 0 )	    m_Cond.Wait( );	m_CurValue--;	m_Mutex.Unlock( );	m_Cond.Signal( );	return 0;    }};void CThreadSemaphore::Init( int maxvalue ){    m_Mutex.Lock( );    m_CurValue = 0;    m_MaxValue = maxvalue;    m_Mutex.Unlock( );    m_Cond.Signal( );}/************************************************************************** * 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( ){};    int GetValue( );    int SetValue( );     virtual int Lock( )     {    	m_SemBuf.sem_num  = 0;    	m_SemBuf.sem_op   = -1;    	m_SemBuf.sem_flg = SEM_UNDO;    	semop(m_Semap,&m_SemBuf,1);     }    virtual int Unlock()        {     	m_SemBuf.sem_num  = 0;    	m_SemBuf.sem_op   = 1;    	m_SemBuf.sem_flg = SEM_UNDO;        	semop(m_Semap,&m_SemBuf,1);     }};int CProcessMutex::GetValue( ){       }int CProcessMutex::SetValue( ){}/************************************************************************** * 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"));}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91国产丝袜在线播放| 不卡的av中国片| 欧美日韩一本到| 国产麻豆午夜三级精品| 亚洲乱码日产精品bd| 精品不卡在线视频| 色就色 综合激情| 国产精品1区二区.| 日本欧美一区二区三区| 91麻豆精品国产91久久久| 成人性生交大片免费| 偷窥国产亚洲免费视频| 国产精品国产精品国产专区不蜜| 欧美日韩久久久一区| 色婷婷国产精品| 亚洲精品国产a| 国产成人精品一区二区三区四区| 国产精品福利av| 欧美精品一区二区三区蜜桃| 欧美高清精品3d| 欧美三片在线视频观看| av在线播放一区二区三区| 蜜臀久久久99精品久久久久久| 亚洲国产综合人成综合网站| 中文字幕中文字幕中文字幕亚洲无线| 欧美亚洲免费在线一区| 色哟哟一区二区三区| 91免费观看视频在线| 99热国产精品| 六月丁香婷婷色狠狠久久| 日韩和欧美一区二区三区| 亚洲国产视频一区| 五月开心婷婷久久| 麻豆91在线看| 国产精品资源在线| 成人黄色小视频在线观看| 国产成人综合亚洲网站| 国产91富婆露脸刺激对白| caoporen国产精品视频| 91美女视频网站| 在线观看国产91| 欧美午夜不卡在线观看免费| 欧美影视一区二区三区| 日韩一区二区免费视频| www久久精品| 亚洲精品福利视频网站| 日韩高清在线电影| 粉嫩av一区二区三区| 色94色欧美sute亚洲线路一久| 欧美一区二区日韩| 日本一区二区免费在线观看视频| 亚洲黄色小说网站| 激情图片小说一区| av在线免费不卡| 久久亚区不卡日本| 亚洲精品精品亚洲| 国产成人精品免费看| 91视频免费观看| 欧美日韩二区三区| 亚洲人成网站色在线观看| 久久99热狠狠色一区二区| 99久久er热在这里只有精品15 | 91麻豆精品国产| 综合久久久久久| 久久精品国产第一区二区三区| 日韩免费性生活视频播放| 日韩欧美一区在线观看| 中文字幕亚洲一区二区va在线| 久久精品国产一区二区三| 欧美三级中文字幕| 综合久久综合久久| 色综合激情五月| 国产精品色一区二区三区| 久久99国产精品免费| 91精品国产麻豆国产自产在线 | 欧美三级午夜理伦三级中视频| 国产日韩欧美精品在线| 免费不卡在线观看| 日韩一区二区三区av| 三级久久三级久久久| 欧美一区二区三区视频免费播放| 亚洲一区在线观看网站| 国产乱码精品一区二区三区五月婷| 欧美一区2区视频在线观看| 亚洲免费av网站| 欧美精品三级在线观看| 天天做天天摸天天爽国产一区| 欧美综合亚洲图片综合区| 亚洲图片有声小说| 欧美色区777第一页| 免费成人美女在线观看| 精品捆绑美女sm三区| 成人网在线播放| 一区二区三区在线播放| 欧美日韩国产综合久久| 卡一卡二国产精品 | 国产黑丝在线一区二区三区| 欧美国产一区二区在线观看| 99国产一区二区三精品乱码| 一区二区三区中文在线观看| 欧美视频一区二区| 青青草国产精品97视觉盛宴 | 亚洲婷婷在线视频| 在线成人av网站| 成人一道本在线| 亚洲国产婷婷综合在线精品| 久久精品视频网| 欧美精品久久久久久久多人混战| 蜜臀久久99精品久久久久宅男 | 国产1区2区3区精品美女| 亚洲一区二区精品视频| 久久久av毛片精品| 91精品在线免费| 91福利在线导航| a4yy欧美一区二区三区| 久久激情综合网| 亚洲成av人片在线观看无码| 国产精品丝袜一区| 2023国产精品| 日韩三级免费观看| 欧美性猛片aaaaaaa做受| 91毛片在线观看| 国产伦精品一区二区三区视频青涩| 亚洲成人免费视| 亚洲免费av网站| 亚洲国产日韩a在线播放性色| 亚洲欧美日本韩国| 午夜日韩在线电影| 蜜臀99久久精品久久久久久软件| 日韩高清不卡一区二区| 黑人巨大精品欧美一区| 成人伦理片在线| 欧美亚洲自拍偷拍| 日韩精品一区在线| 国产精品美日韩| 亚洲午夜在线电影| 捆绑变态av一区二区三区| 高清久久久久久| 欧美色图在线观看| 国产亚洲精品7777| 亚洲无线码一区二区三区| 日本色综合中文字幕| 国产成人免费高清| 欧美人动与zoxxxx乱| 国产精品私房写真福利视频| 亚洲午夜精品网| 国产白丝网站精品污在线入口| 91毛片在线观看| 久久免费美女视频| 首页亚洲欧美制服丝腿| 粉嫩高潮美女一区二区三区| 69堂成人精品免费视频| 中文字幕欧美区| 久久99精品一区二区三区| 在线中文字幕一区| 国产日韩av一区二区| 免费视频一区二区| 在线免费观看一区| 一区免费观看视频| 国产成人一区二区精品非洲| 69精品人人人人| 一区二区激情小说| 91亚洲精品久久久蜜桃| 国产三级一区二区| 国产成人一区在线| 国产午夜精品美女毛片视频| 久久综合综合久久综合| 欧美日韩国产高清一区二区三区| 国产精品国产三级国产普通话蜜臀| 国内精品伊人久久久久影院对白| 欧美色区777第一页| 亚洲成人动漫一区| 欧美日韩国产首页| 亚洲www啪成人一区二区麻豆 | 精品1区2区在线观看| 久久丁香综合五月国产三级网站 | 日韩欧美电影在线| 精品一区二区在线看| 久久久久99精品一区| 东方欧美亚洲色图在线| 国产精品久久久久久久久果冻传媒| 国产黄色精品网站| 亚洲视频一区在线| 欧美老肥妇做.爰bbww视频| 男人的天堂亚洲一区| 久久夜色精品一区| 99re热这里只有精品视频| 亚洲精品va在线观看| 日韩欧美中文字幕公布| 国产精品一二三在| 亚洲一区欧美一区| 精品乱人伦小说| 色国产综合视频| 日韩成人午夜电影| 国产精品美女久久久久久久久 | 欧美一区二区高清| 国产成人午夜精品5599| 午夜久久电影网| 中文字幕国产精品一区二区| 欧美精品视频www在线观看|