在关于Lock的程序实现方法中,为啥test\u0026set这个方法是atomic的
你老师给你展示的是伪代码, 为了让你能理解这个操作的具体含义. 实际再实现的时候是单一指令的. 比如x86下是 CMPXCHGn the x86 (since 80486) and Itanium architectures this is implemented as the compare and exchange (CMPXCHG) instruction
■网友
学习论文:In 2003, Maurice Herlihy was awarded the Edsger W. Dijkstra Prize in Distributed Computing for his seminal 1991 paper "Wait-Free Synchronization" (see http://2003 Edsger W. Dijkstra Prize in Distributed Computingboost库中shared_ptr的cref是原子操作sp_counted_base_gcc_x86.hpp __asm__ __volatile__ ( "lock\\\t" "xadd %1, %0": "=m"( *pw ), "=r"( r ): // outputs (%0, %1) "m"( *pw ), "1"( dv ): // inputs (%2, %3 == %1) "memory", "cc" // clobbers );C++ lockfree实现spinlock来源于C/C++ Users Journal October, 2004给出一个java版本的实现import java.util.concurrent.atomic.AtomicBoolean;import java.util.concurrent.atomic.AtomicReference;public class SpinLock { private static Logger logger = LoggerFactory.getLogger(SpinLock.class); private AtomicBoolean flag = new AtomicBoolean(false); private AtomicReference\u0026lt;Thread\u0026gt; owner = new AtomicReference\u0026lt;Thread\u0026gt;(null); public void lock() { if (owner.get() == Thread.currentThread()) { logger.error("spin lock can not be locked repeatedly by an identical thread"); return; } boolean f; do { f = flag.get(); } while (f || !flag.compareAndSet(f, true)); owner.set(Thread.currentThread()); } public void unlock() { if (!owner.compareAndSet(Thread.currentThread(), null)) { logger.error("current thread is not owner of spin lock"); return; } if (!flag.compareAndSet(true, false)) { logger.error("weired error"); } } @Override public Object clone() throws CloneNotSupportedException { throw new CloneNotSupportedException(); }}
■网友
硬件支持CAS的原子操作
■网友
其实这段x86是这样的:mov (%), %%eaxtest %%eax,%%eaxjnz outmovl $1,%%edxlock cmpxchg %%edx, (%)
■网友
这是伪代码,实际的test-and-set 一般是硬件实现,也就是说三条伪代码对应的是一个不可中断的指令,具有原子性
■网友
我记得TSL是硬件层支持的,并不是从OS/软件层面支持的。所以可以保证原子性
推荐阅读
- 过节■江苏省委省政府办公厅下发关于做好2021年元旦春节期间有关工作的通知
- 招聘都要学历,何来程序员不看学历
- 银行系统的研发岗(程序员)是不是很难进(校招)推广到国企的研发岗(程序员)呢
- 坐标合肥,请问在哪里能捕捉到程序员这种生物他们大都出现在哪里呢
- 程序猿和产品汪能愉快的一起谈恋爱嘛
- 怎样成为一名合格的Python程序员?
- |徐州市出台《关于优化创新创业生态系统 提升区域科技创新活力的实施意见》及实施细则
- 雨下|全球关于禁售燃油车只是理论上可行吗
- 我是程序猿养了条狗,取啥名字好
- 送程序员男友苹果无线耳机还是专业品牌耳机
