没有合适的资源?快使用搜索试试~ 我知道了~
互斥锁、条件变量、信号量总结
3星 · 超过75%的资源 需积分: 48 26 下载量 179 浏览量
2009-12-30
15:24:07
上传
评论
收藏 13KB DOC 举报
温馨提示
试读
2页
互斥锁、条件变量、信号量是系统为实现多线程(多进程)访问共享资源或共同协作的同步机制
资源推荐
资源详情
资源评论
互斥锁、条件变量、信号量总结
互斥锁、条件变量、信号量是系统为是实现多线程(多进程)访问共享资源或共同协
作的同步机制。
互斥锁:用于多线程互斥地访问共享资源。
1)语义为互斥地使用共享资源,在多线程需要互斥访问共享资源时应使用互斥锁,而不应
使用其它同步机制。
2)虽然信号量能够实现互斥锁 mutex 功能,但信号量功能过于强大,在表示互斥方面其语
义不明确,且浪费系统资源。
3)应用范围:多线程
条件变量:用于多个线程分时协作完成一项任务。
1)语义为在不满足自己工作的条件时,主动阻塞自己,同时释放 CPU 让其它线程工作,等
待其它线程唤醒。否则,
往下执行,完成一项任务中自己应分担那部分工作,任务完成之后唤醒阻塞在该任务的条
件变量上的其它线程,
让其它线程进行它们应分担的工作;
在多线程需要线性分时协作完成一项任务时应使用条件变量,而不应使用其它同步机制。
2)为了防止测试条件时产生竞争,条件变量必须和互斥锁一起使用。
3)应用范围:多线程
4)通常条件变量是利用线程间共享的全局变量进行同步的一种机制。
如:有两个线程共同完成打印 1 到 100 这项任务,线程 1 打印其中的 1-9、21-29、..等,线
程 2 打印其中的 10、20、30..等。
共享变量 i
共享变量 mutex
共享变量 cond
线程 1:
for(i=1;i<=100;i++)
{
pthread_mutex_lock(&mutex);/*锁住互斥量*/
while(i%10==0)/*条件不满足(或者说满足其它线程的条件)时就主动挂起自己,让其
它线程工作*/
pthread_cond_wait(&cond,&mutex);/*先解锁 mutex,然后阻塞自己,等待其它线程唤
醒*/
printf("thead1:%d",i);
pthread_cond_signal(&cond);/*唤醒阻塞在条件变量 cond 上的一个线程*/
pthread_mutex_unlock(&mutex);/*解锁互斥量*/
sleep(1);
}
资源评论
- 弯弯的丝瓜2023-06-25这么几个字48积分? 通货膨胀了啊
- necy1232012-09-06内容还不错就是太少了
dongyuesy
- 粉丝: 1
- 资源: 21
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功