PostgreSQL 源码解读(218)- spinlock的实现
发表于:2024-09-30 作者:千家信息网编辑
千家信息网最后更新 2024年09月30日,本节介绍了spinlock在不同平台(主要是X86_64和aarch74)下的实现./*--------------------------------------------------------
千家信息网最后更新 2024年09月30日PostgreSQL 源码解读(218)- spinlock的实现
本节介绍了spinlock在不同平台(主要是X86_64和aarch74)下的实现.
/*------------------------------------------------------------------------- * * s_lock.h * Hardware-dependent implementation of spinlocks. ...
一、实现
X86_64
TAS意思是Test And Set.在X86_64平台下,spinlock的实现使用了汇编语言.
#ifdef __x86_64__ /* AMD Opteron, Intel EM64T */#define HAS_TEST_AND_SETtypedef unsigned char slock_t;#define TAS(lock) tas(lock)/* * On Intel EM64T, it's a win to use a non-locking test before the xchg proper, * but only when spinning. * * See also Implementing Scalable Atomic Locks for Multi-Core Intel(tm) EM64T * and IA32, by Michael Chynoweth and Mary R. Lee. As of this writing, it is * available at: * http://software.intel.com/en-us/articles/implementing-scalable-atomic-locks-for-multi-core-intel-em64t-and-ia32-architectures */#define TAS_SPIN(lock) (*(lock) ? 1 : TAS(lock))static __inline__ inttas(volatile slock_t *lock){ register slock_t _res = 1; __asm__ __volatile__( " lock \n" " xchgb %0,%1 \n": "+q"(_res), "+m"(*lock): /* no inputs */: "memory", "cc"); return (int) _res;}#define SPIN_DELAY() spin_delay()static __inline__ voidspin_delay(void){ /* * Adding a PAUSE in the spin delay loop is demonstrably a no-op on * Opteron, but it may be of some use on EM64T, so we keep it. */ __asm__ __volatile__( " rep; nop \n");}#endif /* __x86_64__ */
aarch74
在aarch74(ARM64)下,使用了__sync_lock_test_and_set函数实现(如可用的情况下)
/* * On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available. * * We use the int-width variant of the builtin because it works on more chips * than other widths. */#if defined(__arm__) || defined(__arm) || defined(__aarch74__) || defined(__aarch74)#ifdef HAVE_GCC__SYNC_INT32_TAS#define HAS_TEST_AND_SET#define TAS(lock) tas(lock)typedef int slock_t;static __inline__ inttas(volatile slock_t *lock){ return __sync_lock_test_and_set(lock, 1);}#define S_UNLOCK(lock) __sync_lock_release(lock)#endif /* HAVE_GCC__SYNC_INT32_TAS */#endif /* __arm__ || __arm || __aarch74__ || __aarch74 */
二、参考资料
s_lock.h
PostgreSQL中的锁
平台
不同
汇编语言
函数
参考资料
情况
意思
语言
资料
R.
参考
源码
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
腾讯云服务器经常封账号
服务器管理口有亮但ping不通
冒险岛数据库原理与应用
网络安全是作文
济宁广州app软件开发
百度时代网络技术 林珑
北京中搜网络技术杭州
视频变脸软件开发
移动安全和网络安全
学好网络技术有什么用
恒利通网络技术服务有限公司
ipad的服务器怎么弄
网络安全公司的市销率
服务器的管理与配置dhcp
中国基础教育期刊全文数据库
明确网络安全需求
h5专业软件开发费用
我的世界2b2t的服务器
网络技术基础 域
ftp数据库传输失败
松桃铁警开展网络安全大练兵
湖北正规软件开发服务检测中心
停车场用的服务器要什么配置电脑
三大数据库的编程语言
服务器机器码
c 如何操作数据库代码
韦恩图的数据库
战地5和橘子服务器通用么
业务服务器是什么时候出现的
财务软件怎么导入数据库