mutex和condition的用法
来源:互联网 发布:巫师3低配优化补丁 编辑:程序博客网 时间:2024/05/12 12:00
分享一下DTCP-IP中用到的mutex和condition用法。
Mutex一般有两种使用情况,一种是单独使用,保护临界区。
一种是和condition配合使用,可以等待某condition拿到之后再向下走。
Condition 有两种signal形式, single和 broadcast,下面例子是signal的,
做个参考。
pthread_cond_t ake_cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t ake_mutex = PTHREAD_MUTEX_INITIALIZER;
thread 1: 等待AKE完成的signal
pthread_mutex_lock(&ake_mutex);
if (DTCP_AKE_STATE_GOT_EXCHANGE_KEY !=DTCP_AKE_Get_Current_State()) {
pthread_cond_wait(&ake_cond, &ake_mutex);
//进入wait状态之后, ake_mutex会处于unlock状态;
//等待拿到ake_cond后,, ake_mutex会变为lock状态;
pthread_cond_wait有多种用法,还有一种pthread_cond_wait带 timeout功能,
可以等待condition某段时间之后如果还拿不到则向下执行,我上次使用有些问题,有兴趣用到时候可以研究下。
}
pthread_mutex_unlock(&ake_mutex);
thread 2: AKE完成之后发送signal
void DTCP_Decrypt_AKE_Finish_Callback(void){
DTCPLOGV(DECRYPTTAG, "[%s: %d] enter", __FUNCTION__, __LINE__);
pthread_mutex_lock(&ake_mutex);
pthread_cond_signal(&ake_cond);
pthread_mutex_unlock(&ake_mutex);
}
/************************************************/
pthread_cond_timedwait 用法
pthread_mutex_lock(&mutex);
clock_gettime(CLOCK_MONOTONIC, &tv);
outtime.tv_sec = tv.tv_sec;
outtime.tv_nsec = tv.tv_nsec + 100 * 1000 * 1000;
if(outtime.tv_nsec > 1000 * 1000 * 1000){
outtime.tv_sec = outtime.tv_sec + outtime.tv_nsec / (1000 * 1000 * 1000);
outtime.tv_nsec = outtime.tv_nsec % (1000*1000*1000);
}
int result = pthread_cond_timedwait(&(pMPthread->m_cond), &mutex, &outtime);
if (result == ETIMEDOUT) {
//MGR_LOGT << "pthread_cond_timedwait timeout!!!";
}
pthread_mutex_unlock(&mutex);
pthread_condattr_init(&m_attr);
pthread_condattr_setclock(&m_attr, CLOCK_MONOTONIC);
pthread_cond_init(&m_cond, &m_attr);
Clock_realtime
CLOCK_MONOTONIC
更多资料参考:
http://www.360doc.com/content/12/0924/17/706976_237933566.shtml
- mutex和condition的用法
- qnx的mutex和condition学习
- mutex和 condition 的同步机制
- 线程同步:Mutex和Condition
- mutex 和 condition variable[转载]
- Android同步类:Mutex和Condition的使用方式
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- Android同步类:Mutex和Condition
- mutex、condition与pthread_cond_wait()函数的使用
- Ant unless 和condition的用法
- java Lock和Condition的用法
- 线程同步的方式——Mutex(互斥量)、 Condition variable(条件变量)和Semaphore(信号量)
- mutex用法和例子
- boost::condition的用法
- std::mutex的用法
- 硬编码和软编码
- 关于为何设立<样本分析>这个栏目的问答及暂用分析报告格式
- android文件读写
- 自定义标签。毫秒时间转换成yyyy-MM-dd格式显示
- JavaScript 代码片段
- mutex和condition的用法
- [bfs]poj 3126 Prime Path
- bzoj1040: [ZJOI2008]骑士 dp
- ac算法--c++实现
- 一些常用正则表达式备用
- Android 官方推荐 : DialogFragment 创建对话框
- GStreamer应用开发手册学习笔记之二
- GRE写作必备句型
- 不同浏览器下载乱码问题