当前位置: 首页 > wzjs >正文

北京外贸网站建设深圳网站设计营销型

北京外贸网站建设,深圳网站设计营销型,艾迪网络专业的网站建设公司,在站点上新建网页文章目录 多线程下自旋锁的行为逻辑1 自旋锁的基本逻辑2 线程状态分析3 自旋锁缺点4 自旋锁优化方式5 多核场景总结 多线程下自旋锁的行为逻辑 如果是自旋锁(spinlock)逻辑,当一个线程已经持有锁时,其他线程会不断尝试获取锁&…

文章目录

  • 多线程下自旋锁的行为逻辑
    • 1 自旋锁的基本逻辑
    • 2 线程状态分析
    • 3 自旋锁缺点
    • 4 自旋锁优化方式
    • 5 多核场景
    • 总结

多线程下自旋锁的行为逻辑

如果是自旋锁(spinlock)逻辑,当一个线程已经持有锁时,其他线程会不断尝试获取锁,处于“忙等(busy-waiting)”状态,不会主动休眠、挂起或进入阻塞态,除非你显式地这么写。


1 自旋锁的基本逻辑

std::atomic_flag lock = ATOMIC_FLAG_INIT;void lock_spin() {while (lock.test_and_set(std::memory_order_acquire)) {// 自旋:啥也不做,继续尝试获取锁}
}void unlock_spin() {lock.clear(std::memory_order_release);
}
  • test_and_set() 会原子地设置 locktrue,并返回旧值。
  • 如果另一个线程已设置 lock = true,那么当前线程会进入 while 循环 —— 这就是“忙等”。
  • 自旋期间线程不会释放 CPU,也不会进入 sleep 或 yield,仍然在占用计算资源。

2 线程状态分析

线程状态说明
持锁线程正常执行,直到 unlock()
自旋线程CPU 上循环尝试获取锁(高 CPU 占用),处于 Running 状态
阻塞线程不是自旋锁的行为,阻塞/挂起是互斥锁或条件变量做的事

在操作系统中,自旋线程的状态在调度器眼中通常是 “running”,如果被抢占则为 “ready”,而不是 “waiting” 或 “sleeping”。


3 自旋锁缺点

  • CPU 浪费大:线程处于忙等状态,浪费 CPU 周期。
  • 在多核下高竞争时非常低效。
  • 如果持锁线程长时间执行(或阻塞),自旋线程将毫无意义地消耗资源。

4 自旋锁优化方式

  1. 加上 pause/yield 提示 CPU 优化自旋:
while (lock.test_and_set(std::memory_order_acquire)) {std::this_thread::yield();  // Hint 给操作系统让出 CPU
}
  1. 自旋 + 回退 + sleep(适合高争用):
int count = 0;
while (lock.test_and_set(std::memory_order_acquire)) {if (++count > 1000) {std::this_thread::sleep_for(std::chrono::microseconds(10));  // 主动退让}
}

5 多核场景

  1. 可以有多个线程处于“运行态”吗?

可以有多个线程处于“就绪态(ready)”或“运行态(running)”,但实际同时运行的线程数量受限于 CPU 核心数。

  • 操作系统的线程调度器会维护多个状态:

    • Running:正在某个 CPU 核上执行。
    • Ready:准备好运行,但暂时没分配到 CPU。
    • Waiting/Sleeping/Blocked:在等 I/O、锁、条件变量等。
  • 如果你的系统是 4 核 CPU,那么最多可以同时运行 4 个线程(真正的并行)。

  • 其他线程即使“处于运行态”,但本质上是 ready 状态,被 OS 调度器等待调度。

  1. CPU 怎么决定“分配给谁”?
    由操作系统的 线程调度器(scheduler) 决定。调度策略有多种:
策略描述
时间片轮转(round-robin)每个线程轮流使用 CPU
优先级调度优先级高的线程更容易获得 CPU
多队列反馈结合线程运行情况动态调整优先级

调度器会考虑:

  • 线程优先级(nice 值、real-time 等)
  • 当前负载(load balancing)
  • CPU cache affinity(避免 cache miss)
  • 多核负载均衡(尽量让线程平均分布到各个核心)
  1. 多核 CPU 下的多线程运行模型
  • 多核 = 真正的“并行”执行

如果你有 8 核 CPU,你的 8 个线程可以真正在同一时间点并行执行,每个线程占用一个核心。线程之间通过共享内存、缓存一致性协议(如 MESI)等机制保持同步。

示例:4 个线程,4 核 CPU

时间核心 0核心 1核心 2核心 3
T0线程 A线程 B线程 C线程 D
T1线程 A线程 B线程 E线程 F

同时最多执行 4 个线程,剩下的在线程队列中等待调度。

  1. 自旋锁下,多线程抢锁是怎样的?
  • 每个核心上的线程在同时执行 while (lock.test_and_set()),此时所有核的线程都在自旋。
  • 哪个线程在某一时刻成功把 lock 从 false 设置为 true,它就赢得了执行权,进入临界区。
  • 其他线程仍然自旋,不会被挂起。
  1. 举个真实案例:8线程自旋 + 4核 CPU

  2. 线程 A 拿到自旋锁。

  3. 线程 B~H 也在尝试拿锁,它们会在各自 CPU 核或被调度时执行 while 自旋。

  4. 一旦线程 A 执行完 unlock(),调度器从剩下的线程中挑选一个抢锁成功。

  5. 其余线程继续自旋。


总结

情况自旋锁表现
锁未被持有线程获取锁,正常执行
锁被持有自旋线程持续运行,占用 CPU
高并发场景多线程争用,自旋浪费严重
最佳用途锁持有时间非常短的临界区,如 CPU 缓存级并发控制
问题回答
多个线程可以运行吗?可以,但并发度受限于 CPU 核数
谁获得 CPU 执行?操作系统调度器决定,基于策略
多核是怎么处理多线程的?各核独立运行线程,实现真正并行
自旋锁时线程状态?在运行或就绪态,不会自动 sleep

文章转载自:

http://2A0FLXZ8.zztkt.cn
http://G35ImipS.zztkt.cn
http://y8J0Jozk.zztkt.cn
http://pSPbKq5T.zztkt.cn
http://BRBdyhfb.zztkt.cn
http://JAJZIIjH.zztkt.cn
http://gNLyKlaI.zztkt.cn
http://VSwGa1s3.zztkt.cn
http://2cRQQYmi.zztkt.cn
http://AnQQGWHp.zztkt.cn
http://5M6Nzil6.zztkt.cn
http://bg8YnmEg.zztkt.cn
http://5uZixOFc.zztkt.cn
http://KHzncrOS.zztkt.cn
http://zWde8jKN.zztkt.cn
http://MnyLgurN.zztkt.cn
http://pQCdP5Jk.zztkt.cn
http://uQAJxcyF.zztkt.cn
http://06nvKMVR.zztkt.cn
http://1gmF2glN.zztkt.cn
http://vnFYReuh.zztkt.cn
http://YZAkKvqU.zztkt.cn
http://uGI3pdTW.zztkt.cn
http://Z3lgR27A.zztkt.cn
http://YczGwnO4.zztkt.cn
http://auxfux52.zztkt.cn
http://7muXL3wv.zztkt.cn
http://Rsaaumxk.zztkt.cn
http://ckH8xFIh.zztkt.cn
http://shosCueV.zztkt.cn
http://www.dtcms.com/wzjs/724827.html

相关文章:

  • pta编程网站中国石化工程建设有限公司设计许可证编号
  • 用手机网站做app加利弗设计公司官网
  • 做网站是要编程吗南宁黄页电话号码查询
  • seo如何推广网站智慧团建注册登记入口
  • 石家庄网站建设招商spark网站开发
  • 帮客户做传销网站wordpress doc导入
  • 那个装修公司的网站做的好网站建设 接单
  • 无锡优化网站费用韩城建设公司网站
  • 做我的世界背景图的网站室内设计公司和装修公司的区别
  • 推广网站可以做跳转吗新网站多久收录
  • 淄博网络公司做网站的电话网站的工商网监怎么做进去
  • 怎么介绍网站的优缺点网站的设计原则有哪些
  • 网站大全全部规范门户网站的建设和管理办法
  • 沈阳室内设计公司网站关键词优化方案
  • php 网站 上传到空间百度账户
  • 12380网站建设存在的问题红鱼洞水库建设管理局网站
  • 全栈网站开发流程图wordpress 多个域名
  • 微网站开发多少钱新手要如何让网站被收录
  • 大连市城乡建设厅网站深圳网站设计深圳网站建设
  • 上海国际物流网站建设h5手游平台
  • 网站建设的实验原理和方法免费域名app下载
  • 协助别人做网站犯法么凡客诚品服装购物网
  • 空包网站怎么做做网站后台有前途吗
  • 自考网站建设与管理怎样做投资网站
  • 做网站的公司怎么推销复古传奇手游排行榜第一名
  • 建设服装网站目的和作用wordpress深度修改
  • 遵义市营商环境建设局网站wordpress一周热门文章
  • 专业建设外贸网站制作江门公路局网站建设方案
  • 做网站都需要什么资料wordpress5.0.2主题更换
  • flash网站推荐最新网站制作公司哪个好