随笔分类 - Parallel & Concurrency
摘要:Go标准库中提供了Sync.Once来实现“只执行一次”的功能。学习了一下源代码,里面用的是经典的双重检查的模式:```// Once is an object that will perform exactly one action.type Once struct { m Mutex do...
阅读全文
摘要:不变对象是指对象的状态在构造后不可改变。这从根本上消除了线程间同步的需求,与锁或者阻塞策略不同的是,不变对象对运行时和设计时不会带来任何额外的开销,因此不变对象是多线程编程中一个很基本的策略。
阅读全文
摘要:在多线程编程中,安全是我们考虑的最重要的因素。通常程序员都会使用锁来满足安全要求,但是只用锁并不能写出良好的多线程代码,因此我们有必要更深入一点,对线程安全策略进行更加全面的了解。首先谈谈影响线程安全的因素:影响线程安全的因素有三个因素影响到了多线程下的安全性:原子性、可见性和指令顺序 一个原子操作是单独的、不可分割的。但是高级语言中的大多数语句,包括一些简单的读写语句,都不具有原子性,最常见的例...
阅读全文
摘要:1. 并发和并行:一个好的并发算法未必是一个好的并行算法2. 并发编程的2个设计要点:安全和性能,在多CPU环境下还要考虑可扩展性3. 安全性: a. 最常见的方法是要求对象在任意时刻都应该满足一致的状态(不变约束) b. 在某些无阻塞算法中,允许对象暂时处于不一致状态,但是应该在运行中检测并立刻修正它4. 影响安全的因素:原子性、可见性和指令顺...
阅读全文
摘要:在学习Java并发编程的时候看到了单例的讨论,发现CAS挺适应这个场合的,于是顺手写了个简单的,实现了延迟实例化和多线程安全,也算是无锁的一种用法吧:[代码]
阅读全文
摘要:在多核时代,无锁编程是一种重要的并发编程方法,这里提供了一个C#实现的无锁并发队列,基于Michael-Scott算法。
阅读全文

浙公网安备 33010602011771号