应用:线程同步

正式开始之前先简单的解释捋捋几对概念
  • 同步/异步: 打电话和发短信
  • 阻塞/非阻塞:它们是程序在等待消息(无所谓同步或者异步)时的状态.
A. 阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。

socket接收数据函数recv是一个阻塞调用的例子。
当socket工作在阻塞模式的时候, 如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。

B. 非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回

好,上正菜,线程的同步: 
  同步就是协同步调,按
预定的先后次序进行运行。如:你说完,我再说。
  “同”字从字面上容易理解为一起动作,其实不是,“同”字应是指协同、协助、互相配合。
如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
  线程同步的几种方法:
  互斥量mute 读写锁 条件变量 还有目前公司常用的信号量.
             互斥量 只能在一个线程里运行
            读写锁用在多核cpu效率高,因为读的话可以多个线程读. 写还是一个线程写
             条件变量(和mute配合使用), 调用时 释放信号量 进入休眠,直到有其他地方进行唤醒
                 也就是说pthread_cond_wait实际上可以看作是以下几个动作的合体:
                   1. 解锁线程锁
                   2.等待线程唤醒
                   3.加锁线程锁


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值