返回顶部
首页 > 资讯 > 数据库 >PostgreSQL 源码解读(218)- spinlock的实现
  • 852
分享到

PostgreSQL 源码解读(218)- spinlock的实现

2024-04-02 19:04:59 852人浏览 安东尼
摘要

本节介绍了spinlock在不同平

本节介绍了spinlock在不同平台(主要是X86_64和aarch74)下的实现.



#define HAS_TEST_AND_SET
typedef unsigned char slock_t;
#define TAS(lock) tas(lock)

#define TAS_SPIN(lock)    (*(lock) ? 1 : TAS(lock))
static __inline__ int
tas(volatile slock_t *lock)
{
    reGISter slock_t _res = 1;
    __asm__ __volatile__(
        "   lock            \n"
        "   xchgb   %0,%1   \n"
:       "+q"(_res), "+m"(*lock)
:       
:       "memory", "cc");
    return (int) _res;
}
#define SPIN_DELAY() spin_delay()
static __inline__ void
spin_delay(void)
{
    
    __asm__ __volatile__(
        " rep; nop          \n");
}
#endif   

aarch74
在aarch74(ARM64)下,使用了__sync_lock_test_and_set函数实现(如可用的情况下)



#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__ int
tas(volatile slock_t *lock)
{
    return __sync_lock_test_and_set(lock, 1);
}
#define S_UNLOCK(lock) __sync_lock_release(lock)
#endif   
#endif   

二、参考资料

s_lock.h
postgresql中的

您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL 源码解读(218)- spinlock的实现

本文链接: https://lsjlt.com/news/48477.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作