CnOps 社区
首页开源项目实践文章视频课程常见问答开发者工具
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具

CnOps 社区

愿景

CnOps 社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页问答iLogtail中的自旋锁是如何实现的?使用了哪些内存序?

iLogtail中的自旋锁是如何实现的?使用了哪些内存序?

#iLogtail#自旋锁#内存序#无锁编程

可观测中文社区 | 2025-03-19

iLogtail中的自旋锁基于std::atomic_flag实现,使用了memory_order_acquire和memory_order_release两种内存序。try_lock()方法调用test_and_set(std::memory_order_acquire)尝试获取锁,unlock()方法调用clear(std::memory_order_release)释放锁。lock()方法在获取失败时通过循环重试并配合boost::detail::yield(k)进行退避,避免忙等浪费CPU。这种设计比使用默认的memory_order_seq_cst性能更好,因为acquire-release语义已足够保证临界区数据的可见性,无需更强的全序一致性。