正式开始之前先简单的解释捋捋几对概念
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
socket接收数据函数recv是一个阻塞调用的例子。
当socket工作在阻塞模式的时候, 如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
B. 非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
好,上正菜,线程的同步:
同步就是协同步调,按 预定的先后次序进行运行。如:你说完,我再说。
- 同步/异步: 打电话和发短信
- 阻塞/非阻塞:它们是程序在等待消息(无所谓同步或者异步)时的状态.
阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回
有人也许会把阻塞调用和同步调用等同起来,实际上他是不同的。
对于同步调用来说,很多时候当前线程还是激活的,只是从逻辑上当前函数没有返回而已。
socket接收数据函数recv是一个阻塞调用的例子。
当socket工作在阻塞模式的时候, 如果没有数据的情况下调用该函数,则当前线程就会被挂起,直到有数据为止。
B. 非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回
好,上正菜,线程的同步:
同步就是协同步调,按 预定的先后次序进行运行。如:你说完,我再说。
“同”字从字面上容易理解为一起动作,其实不是,“同”字应是指协同、协助、互相配合。
如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。
线程同步的几种方法:
互斥量mute 读写锁 条件变量 还有目前公司常用的信号量.
互斥量 只能在一个线程里运行
读写锁用在多核cpu效率高,因为读的话可以多个线程读. 写还是一个线程写
条件变量(和mute配合使用), 调用时 释放信号量 进入休眠,直到有其他地方进行唤醒
也就是说pthread_cond_wait实际上可以看作是以下几个动作的合体:
1. 解锁线程锁
2.等待线程唤醒
3.加锁线程锁
线程同步的几种方法:
互斥量mute 读写锁 条件变量 还有目前公司常用的信号量.