查看OTP 源码编译的源代码
←
OTP 源码编译
跳转到:
导航
、
搜索
因为以下原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
=== erl_lock_check.c 和锁 === * 确保 BEAM 的加锁顺序是一致的,防止死锁。 <pre> * Description: A lock checker that checks that each thread acquires * locks according to a predefined global lock order. The * global lock order is used to prevent deadlocks. If the * lock order is violated, an error message is printed * and the emulator aborts. The lock checker is only * intended to be enabled when debugging. </pre> * include/internal/ 下面是各平台的锁的实现,比如 spinlock, rwlock, x86 平台在 i386 目录下,比如 spinlock.h,使用 xchgb 指令汇编实现 <pre> static ETHR_INLINE int ethr_native_spin_trylock(ethr_native_spinlock_t *lock) { char tmp = 1; __asm__ __volatile__( "xchgb %b0, %1" : "=q"(tmp), "=m"(lock->lock) : "0"(tmp) : "memory"); return tmp == 0; } static ETHR_INLINE void ethr_native_spin_lock(ethr_native_spinlock_t *lock) { for(;;) { if (__builtin_expect(ethr_native_spin_trylock(lock) != 0, 1)) break; do { __asm__ __volatile__("rep;nop" : "=m"(lock->lock) : : "memory"); } while (ethr_native_spin_is_locked(lock)); } } </pre> 如果没有特定平台的实现,那就使用 pthread_spin_lock, native 的实现没有采用 backoff 或者 queue 技术来优化。但是 "rep;nop" 等价于 pause 指令,这是为了 spinlock 性能优化引入的。参考 http://stackoverflow.com/questions/7086220/what-does-rep-nop-mean-in-x86-assembly
返回到
OTP 源码编译
。
个人工具
登录
名字空间
页面
讨论
变换
查看
阅读
查看源代码
查看历史
操作
搜索
导航
首页
社区专页
新闻动态
最近更改
随机页面
帮助
工具箱
链入页面
相关更改
特殊页面