作者ksmrt0123 (ksmrt)
看板ASM
标题Re: [问题] Lock的用法
时间Fri Jan 1 21:05:35 2010
1F:推 WolfLord:嗯,他问的是x86当机指令"LOCK"其实跟他想的不一样 01/01 00:22
2F:推 WolfLord:我跟他讲:用jmp $ 会有差不多的软体效果 XD 01/01 00:27
3F:→ WolfLord:不过他想要会醒的lock,那就复杂了 xddd 01/01 00:28
查了一下「LOCK」的说明,. LOCK并不是一个指令, 它只是指令的
prefix, 必需配合某些特定指令使用. 以达到让CPU跟BUS/Memory知道,
该指令之执行必需符合「Atomicity」要求 (即atomic instruction).
Atomic instruction在shared memory multi-processor系统中是
process synchronization (如 mutual exclusion)之基础. 最基本的
atomic instruction是shared memory read/write. 但read/write
并不够powerful, 用read/write来实作synchronization一方面可能
performance不够好, 一方面有些好的演算法特性用(如FIFO ordering)
已经证明只用read/write是无法作出来的. ^^^^^^^^^^^^^^^^^^^^^^^^^
这边讲错了 只用atomic read/write
是可以作出FIFO ordering的mutual
exclusion algorithm:
http://www.viswiki.com/en/Lamport's_bakery_algorithm
为了克服上述问题, 有些更强的指令被提出, 最有名即是许多演算法会
用到的 compare-and-swap. 这个指令可由CMPXCHG 加上 LOCK实作出来.
其它常见的类似指令还有 test-and-set, swap, fetch-and-store.
在x86都有相关指令可配合LOCK作这些指令来.
问题是要达到atomic的功能, 虽然CPU有此指令, BUS(or interconnect)
及memory system等也都必需要能够配合, 这方面在multi-processor
系统并不容易实作, 实际上好像没有任何x86 shared-memory multi-
processor system是有support LOCK prefix的.
现在的CPU都是多核心, LOCK prefix是否仍适用在现在的多核处理器
我就不清楚了...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.68.71.218
※ 编辑: ksmrt0123 来自: 219.68.71.218 (01/02 09:54)