临界区互斥的实现
2009-12-11 14:18
337 查看
利用信号量和锁机制,可以实现线程互斥地访问共有资源或数据.实现代码如下:
#ifndef CRITICAL_H_ #define CRITICAL_H_ #include <sys/ipc.h> #include <sys/sem.h> typedef int CRITICAL_SEC; union semun { int val; struct semid_ds *buf; unsigned short int *array; struct seminfo *__buf; }; class CCriticalSec { public: CCriticalSec() { m_pCriticalSec = semget (IPC_PRIVATE, 1, IPC_CREAT); //创建信号量 union semun argument; unsigned short values[1]; values[0] = 1; argument.array = values; semctl (m_pCriticalSec, 0, SETALL, argument); } ~CCriticalSec() { union semun ignored_argument; semctl (m_pCriticalSec, 1, IPC_RMID, ignored_argument); } unsigned short Lock() { struct sembuf operations[1]; /* Use the first (and only) semaphore. */ operations[0].sem_num = 0; /* Decrement by 1. */ operations[0].sem_op = -1; /* Permit undo ing. */ operations[0].sem_flg = SEM_UNDO; return semop (m_pCriticalSec, operations, 1); } unsigned short Unlock() { struct sembuf operations[1]; /* Use the first (and only) semaphore. */ operations[0].sem_num = 0; /* Increment by 1. */ operations[0].sem_op = 1; /* Permit undo ing. */ operations[0].sem_flg = SEM_UNDO; return semop (m_pCriticalSec, operations, 1); } private: CRITICAL_SEC m_pCriticalSec; }; #endif
相关文章推荐
- 用临界区实现互斥资源的访问
- 临界区实现线程同步互斥
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- 使用临界区 CRITICAL_SECTION 实现互斥
- 软件实现临界区互斥的方法总结思考(四种算法的递进推导)
- php用apc实现的临界区 解决并发,资源互斥同步访问
- php用apc实现的临界区 解决并发,资源互斥同步访问
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- 实现临界区互斥的基本方法
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- ACE利用ACE_Thread_Mutex实现线程间互斥访问临界区
- 使用临界区 CRITICAL_SECTION 实现互斥
- (六)线程--分别用lock以及Interlocked和Monitor类实现线程的临界区操作(互斥)(示例下载)
- [C++] socket - 6 [API互斥事件对象实现线程同步]
- html 的radio单选框如何实现互斥------radio只是input的type属性
- java实现同步互斥问题
- win32平台下互斥锁的实现
- js 实现复选框(checkbox)类似单选钮(radio)点击互斥效果
- 互斥、临界区、信号灯、事件