[其他] 多线程对数据结构的访问模式

本文探讨了在多线程环境下,数据结构的并发访问与串行化之间的区别和优缺点。串行化虽然简单易懂,但效率低下,可能导致线程饥饿;而并发访问则能提高效率,但实现复杂,可能面临锁的问题。并发通过精细控制可避免死锁等,提供更高性能,但设计上更具挑战性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

serialization :

多个线程 依次 访问(增删改查)数据结构,这叫做 serialization , 一般用锁来作数据结构的访问权限控制。这种场景比较常用,比较可靠,但是效率较低,当一个线程访问的时候,其他线程都会处于starving状态,这不是 并发 ,虽然是多线程,但是很遗憾确实不是 并发,因为只有一个线程活跃。

串行化的有两大缺点:1)效率低;2)锁会带来一定的不稳定性,比如死锁和优先级翻转就经常出现。

但是有点也是很明显的:设计简单易于理解和维护。

 

concurrent:

多个线程 同时 访问(不是增删改查都支持,视并发场景而定)数据结构的 个别部分或者全部。这种场景比较高效,多个线程可以同时访问同一个数据结构,但是功能往往会受限,比如只有一个线程写其他线程只读。如果想设计增删改查都能全面支持的数据结构就比较费事,比如无锁结构的数据结构就需要结合 内存模型 、原子操作 乃至 汇编代码 进行设计。这种模型效率极高且不会死锁、活锁、优先级翻转这些锁带来的副作用

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值