Semaphore与Mutex简介
2014-04-02 09:45
387 查看
Semaphore,即信号量(CreateSemaphore/sem_init),官网解释是用来保护多重资源的访问,它可以设置一个大于0的值,如N,任何访问者在该信号量大于1的情况下均可以获得资源的访问权,并将相应的信号量减1,当访问完成后,信号量加1,即该资源可以同时容纳N个访问者。但是据我了解,一般在为了线程在某一定程度上的顺序执行才使用信号量,即线程A等待线程B执行完某些操作以后,才能继续往下执行,可以理解为,组装厂A需要等待(WaitForSingleObject/sem_wait)元件厂B交付元件以后(ReleaseSemaphore/sem_post)才能继续生产。当信号量不再使用时,销毁它(CloseHandle/sem_destroy)Mutex,(CreateMutex/pthread_mutex_init)互斥体,就是限制某一资源的访问,每次只能容纳一个访问者。访问者A进入房间以后立即锁门(WaitForSingleObject/pthread_mutex_lock),任何其他人都不许进入,等A访问完以后打开锁(ReleaseMutex/pthread_mutex_unlock),访问者B才可以进入。当资源不再被使用时,释放资源(CloseHandle/pthread_mutex_destroy).1.Semaphore在linux下与Semaphore相关的操作函数为:
sem_init():初始化一个信号量
sem_wait():一直等待信号量,直到信号量大于0
sem_timedwait():设定超时等待。
sem_post():信号量加1
sem_destory():释放信号量。
例:#include <stdio.h>
#include <errno.h>
#include <semaphore.h>
#include <time.h>
int main() {sem_t mysemp;struct timespec ts;int sts, val;if ( sem_init (&mysemp, 0, 0) == -1 ) {//第二个参数设定信号量可见范围,0,进程内可见,用于线程间的同步操作,1是进程间可见。perror("sem_init is err");return P-1;}ts.tv_sec=time(NULL)+10;//10s超时等待ts.tv_nsec=0;//不可少sts = sem_timedwait(&mysemp, &ts);
//sts = sem_wai(&mysemp);//永远等待....
sem_destroy(&mysemp);}2.Mutex
相关文章推荐
- [zz]64bit&nbsp;ubuntu&nbsp;安装32bit软件
- VS2008中统计代码行数
- ubuntu&amp;tomcat最大连接数限制
- android&nbsp;如何获取CPU频率(HZ…
- 数据库的查询优化技术
- IE浏览器上传文件时本地路径变成”C:\fakepath\”的问题
- mysql性能最大化
- C++中class&nbsp;String类的定义
- 关于计算机程序的内存分配
- 常量指针和指向常量的指针
- C++的一些小问题总结
- malloc/free&nbsp;和new/delete的区别
- 买卖股票之道
- 关于const的一个问题
- 一个关于自加的问题++
- OnDraw和OnPaint的区别
- zz农村广播员太有才了
- 气质如兰&nbsp;一代才女林徽因
- 气质如兰&nbsp;一代才女林徽因(续1)
- 气质如兰&nbsp;一代才女林徽因(续2)