线程的同步方式
发表于|更新于|计算机基础知识
|总字数:200|阅读时长:1分钟|浏览量:
线程间的同步方式
线程同步机制是指在多线程编程中,为例保证线程之间的互不干扰,而采用的一种机制。常见的线程同步机制有以下几种:
- 互斥锁:是最常见的线程同步机制。它允许只有一个线程同时访问被保护的临界区(共享资源)。
- 读写锁:允许多个线程同时读取共享资源,但只允许一个线程写入资源。
- 条件变量:用于线程间通信,允许一个线程等待某个条件满足,而其他线程可以发出信号通知等待线程。通常与互斥锁一起使用。
- 信号量:用于控制多个线程对共享资源进行访问的工具。
文章作者: QY
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 qyhome!
相关推荐
2025-06-23
进程间通信方式
进程间通信方式
管道
命名管道
共享内存
消息队列
套接字(socket)
信号
信号量
管道:是一种半双工的通信方式,数据只能单向流动而且只能在具有父子进程关系的进程间使用。
有名管道:也是一种半双工的通信方式,但是它允许无亲缘关系进程间的通信。
信号量:是一个计数器,可以用来控制多个进程对共享资源的访问,常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此主要作为进程间以及同一进程内不同线程之间的同步手段。
消息队列:消息队列是消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
信号:用于通知接收进程某个事件已经发生,从而迫使进程执行信号处理程序。
共享内存:就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存也是最快的进程间通信方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,比如信号量配合使用,来实现进程间同步和通信。
Socket 套接字:是支持...
2025-06-25
什么是死锁?如何避免死锁?
什么是死锁?如何避免死锁?
死锁是指两个或多个进程在争夺系统资源时,由于互相等待对方释放资源而为无法继续执行的状态。
死锁只有同时满足以下四个条件才会发生:
互斥条件:一个进程占用了某个资源时,其他进程无法同时占用该资源。
请求保持条件:一个线程因为请求资源而阻塞的时候,不会释放自己的资源。
不可剥夺条件:资源不能被强制性地从一个进程中剥夺,只能由持有者自愿释放。
环路等待条件:多个进程之间形成一个循环等待资源的链,每个进程都在等待下一个进程所占有的资源。
只需要破坏上面一个条件就可以破坏死锁。
破坏请求与保持条件:一次性申请所有的资源。
破坏不可剥夺条件:占用部分资源的线程进一步申请其他资源时,如果申请不到,可以主动释放它占有的资源。
破坏循环等待条件:靠按序申请资源来预防。让所有进程按照相同的顺序请求资源,释放资源则反序释放。
2025-06-03
线程和进程的区别
进程和线程的区别
进程是系统进行资源分配和调度的基本单位。
线程是操作系统能够进行运算调度的最小单位,线程是进程的子任务,是进程内的执行单元。一个进程至少有一个线程,一个进程可以运行多个线程,这些线程共享一块内存。
资源开销:
进程:由于每个进程都有独立的内存空间,创建和销毁进程的开销较大。进程间切换需要保存和恢复整个进程的状态,因此上下文切换的开销较高。
线程:线程共享相同的内存空间,创建和销毁线程的开销较小。线程间切换只需要保存和恢复少量的线程上下文,因此上下文切换的开销较小。
通信与同步:
进程:由于进程间相互隔离,进程之间的通信需要使用一些特殊机制,如管道、消息队列、共享内存等。
线程:由于线程共享相同的内存空间,它们之间可以直接访问共享数据,线程间通信更加方便。
安全性:
进程:由于进程间相互隔离,一个进程的崩溃不会直接影响其他进程的稳定性。
线程:由于线程共享相同的内存空间,一个线程的错误可能会影响整个进程的稳定性。
2025-06-01
TCP和UDP的区别
TCP和UDP的区别
TCP是一种可靠的面向连接的协议,这意味着,在发送数据之前,TCP会建立一种叫做连接的特殊通信通道,他还会在数据传输过程中检查错误,如果发现错误就会要求重新发送,此外,TCP还会负责数据的排序,保证接收到的数据是按照发送的顺序排列的,这种机制使得TCP在需要可靠传输的情况下非常有用,比如在网页浏览和电子邮件等应用中。
相反,UDP是一种不可靠的无连接的协议,它不会建立特殊的通信通道,也不检查错误或要求重新发送数据,因此UDP通信速度更快,但可能会出现数据丢失和乱序的情况,正因为如此,UDP主要用于那些对数据完整性要求不高,但需要快速传输的应用,比如视频流和语音通话等。
2025-05-30
三次握手的过程,以及为什么是三次,而不是四次,两次
三次握手(TCP连接建立)过程:
第一次握手是建立连接时,客户端发送SYN包到服务器,并等待服务器的确认。
第二次握手时,服务器收到SYN包,同时自己也给客户端发送一个确认包,SYN+ACK包。
第三次握手时,客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK。此包发送完毕后,客户端和服务器端进入到ESTABLISHED状态,也就是TCP连接成功状态,到此完成三次握手。
为什么不是四次握手?为什么不能两次握手?
因为三次握手才能保证双方具有接收和发送的能力。两次握手可能会导致资源的浪费,由于没有第三次握手,服务器无法确认客户端是否收到了自己的回复,所以每收到一个SYN,服务器都会主动去建立一个连接,而四次握手可以优化为三次。

2025-05-29
从输入URL到页面展示发生了什么
URL 解析,提取协议、域名和路径等信息。
DNS 域名解析,将域名转换为 IP 地址,先查缓存,再递归查询 DNS
服务器。
三次握手建立 TCP 连接,如果是 HTTPS 还会进行 TLS 加密握手。
发送 HTTP 请求。
服务器处理请求。
服务器返回响应结果。
四次挥手关闭 TCP 连接。
浏览器解析 HTML。
浏览器布局渲染。