pthread semaphore用法

本篇主要讲解pthread_mutex_t 和pthread_cond_t之间配合的工作以及需要注意的事项:

以下code是在codeblocks中编写~

 

 

首先pthread_create(&thread,&attr,workThread,(void *)&threadId);创建线程,然后通过_sleep(1);目的是让workThread函数先锁定mutex,这样就不会出现pthread_cond_wait, pthread_cond_signal先后的顺序逻辑错误了。

流程:

mainthread->sleep 1->workThread lock mutex -> pthread_cond_wait unlock mutex -> main thread lock mutex 

-> 然后执行循环里面的事情,虽然中途已经解了锁,但是由于主线程仍然未调用pthread_cond_signal所以直到调用后,workThread

才会执行printf,当然pthread_cond_signal也可以紧紧的跟在pthread_mutex_lock后面,那样一旦在循环中调用了pthread_mutex_unlock后主线程和工作线程将会交叉执行 。这么看来当signal给一个线程时,不会妨碍主线程的执行过程 。

 

下面讲解一下pthread与semaphore的用法:

 

首先注意sem_init中第二个和三个参数的意义:第二个如果不为0代表进程间共享sem,第三个代表sem值的初始值。

这是个读写问题,代表每次必须先写后读,主线程要给子线程足够的时间,_sleep(10000)最多只能写读两轮 。。。

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值