多线程 - 使用Mutex和条件变量实现信号量
2013-06-18 18:22
204 查看
说明
在某些平台,信号量可能并不支持,可以使用互斥锁和条件变量模拟实现信号量,代码如下代码
typedef struct { int val; //信号量的值 pthread_mutex_t mutex; pthread_cond_t cond; } semaphore_t; inline void sem_init(semaphore_t *s, int n) { pthread_mutex_init(&(s->mutex), NULL); pthread_cond_init(&(s->cond), NULL); s->val = n; } inline void sem_post(semaphore_t *s) { pthread_mutex_lock(&(s->mutex)); s->val++; pthread_cond_signal(&(s->cond)); pthread_mutex_unlock(&(s->mutex)); } inline int sem_wait(semaphore_t *s) { int rc = 0; pthread_mutex_lock(&(s->mutex)); while (s->val == 0) rc = pthread_cond_wait(&(s->cond), &(s->mutex)); s->val--; pthread_mutex_unlock(&(s->mutex)); return rc; } inline void sem_destroy(semaphore_t *s) { pthread_mutex_destroy(&(s->mutex)); pthread_cond_destroy(&(s->cond)); s->val = 0; }
相关文章推荐
- IOS多线程使用GCD与信号量实现生产者与消费者模式
- 多线程基础之三:使用event, mutex, semaphore实现多进程间互斥
- python3.4多线程实现同步的四种方式(锁机制、条件变量、信号量和同步队列)
- 使用两个信号量和全局变量实现多线程间同步通信
- Linux多线程系列-2-条件变量的使用(线程安全队列的实现)
- 使用System V信号量实现多线程互斥
- Linux多线程系列-2-条件变量的使用(线程安全队列的实现)
- 多线程采用相对时间的信号量同步方法(使用条件变量)
- 使用Handler实现多线程
- pthread多线程编程详细解析----条件变量 pthread_mutex_t
- 【Linux】线程总结:线程同步 -互斥锁,条件变量,信号量实现多生产者多消费者模型
- 使用mutex实现应用程序单实例运行代码分享
- C++多线程笔记:使用std::lock_guard实现对共享数据的保护
- Java Note: 多线程的同步(互斥锁)的方法对比,信号量锁,读写锁的实现,生产者-消费者模式的实现
- java Socket 使用多线程实现一对多的通信
- (作业)使用多线程实现一个网络服务访问程序
- 使用Condition实现多线程之间调用
- 使用 .NET 实现 Ajax 长连接 (Part 2 - Mutex Wait & Signal)
- 使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)