Semaphore与Mutex简介

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值