信号量 互斥锁 条件变量的区别
来源:互联网 发布:淘宝95095买药靠谱吗 编辑:程序博客网 时间:2024/05/22 17:22
互斥锁
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;或pthread_mutex_t mutex;int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr)int pthread_mutex_lock(pthread_mutex_t *mutex)int pthread_mutex_unlock(pthread_mutex_t *mutex)int pthread_mutex_trylock(pthread_mutex_t *mutex)
信号量
sem_t sem_event;int sem_init(sem_t *sem, int pshared, unsigned int value) int sem_destroy(sem_t * sem) int sem_post(sem_t * sem)int sem_wait(sem_t * sem)int sem_trywait(sem_t * sem)int sem_getvalue(sem_t * sem, int * sval)
条件变量
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;或pthread_cond_t cond;int pthread_cond_init(pthread_cond_t *cond, pthread_condattr_t *cond_attr)int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)int pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, const struct timespec *abstime)pthread_cond_signal()
互斥锁没什么好说的。成对出现。
关键是信号量和条件变量的使用场合。
以下两篇文章。
1:讲述:基本定义和用法
Posix线程编程指南(3)
http://www.ibm.com/developerworks/cn/linux/thread/posix_threadapi/part3/
2:一篇博客讲解区别
http://www.cnblogs.com/lonelycatcher/archive/2011/12/20/2294161.html
根据第二个博客的理解应该是:
线程同步:何时互斥锁不够,还需要条件变量?
假设有共享的资源sum,与之相关联的mutex 是lock_s.假设每个线程对sum的操作很简单的,与sum的状态无关,比如只是sum++.
那么只用mutex足够了.程序员只要确保每个线程操作前,取得lock,然后sum++,再unlock即可.简单的理解是,资源是很纯粹的,
没有顺序上的概念。
再看信号灯和条件变量
一般的生产者和消费者模型下,比如一个队列。还是应该使用信号灯,因为,信号灯是计数器,这样队列便可长可短。
但是如果涉及到某个条件的控制或者检测,而不想用sleep的方法,顾名思义,就应当使用条件变量。
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量,互斥锁,条件变量的区别
- 条件变量与互斥锁、信号量的区别
- 互斥锁,条件变量和信号量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 信号量 互斥锁 条件变量的区别
- 实战DeviceIoControl:获取硬盘的详细信息
- 轻松理解扩展欧几里德算法
- C++中string类的用法
- smartforms控制分页,统计合计数 .
- JAVA学习笔记(6)字符串
- 信号量 互斥锁 条件变量的区别
- 在服务中用管理员权限创建一个可弹出UI的进程
- 高效计算Fibonacci数
- mit 计算机科学及编程导论(14,15,16)
- 《QTP自动化测试最佳实践》已经出版
- Java 相关学习网站
- JAVA自定义协议实现网页启动应用程序
- http头信息详解
- 后台默认下拉列表