线程安全-非阻塞同步

线程安全-非阻塞同步

阻塞同步:互斥同步存在的问题时 进行 线程阻塞 和 唤醒所带来的 性能问题, 这种同步称为 阻塞同步(Blocking Synchronization)

这是一种悲观并发策略

非阻塞同步:

不同于 悲观并发策略, 而是使用基于 冲突检测的 乐观并发策略, 就是先进行操作

如果没有其他线程征用共享数据, 则操作成功; 否则就是产生了冲突

采取不断重试直到成功为止的策略, 这种策略不需要把 线程挂起, 称为 非阻塞同步

使用硬件处理器指令 进行不断重试策略(JDK1.5以后)

  • 测试并设置(Test-and-Set)

  • 获取并增加(Fetch-and-Increment)

  • 交换(swap)

  • 比较并交换(Compare-and-Swap, 简称CAS)

  • 加载链接, 条件存储(Load-Linked, Store-conditional, 简称LL, SC)

    例: Java实现类AtomicInteger, AtomicDouble等等

用 AtomicInteger来改进

class Counter {
    private AtomicInteger count = new AtomicInteger();
    public void increment() {
        count.incrementAndGet();
    }
    
    // 使用AtomicInteger之后, 不需要加锁, 也可以实现线程安全
    public int getCount() {
        return count.get();
    }
}

参考链接

https://www.xuetangx.com/learn/THU08091000252/THU08091000252/7754101/video/12732939

posted on   beyondx  阅读(68)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示