`
Aoogoo
  • 浏览: 21533 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Postgresql源码中spinlock的基础:TAS

阅读更多
PostgreSQL中使用spinlock来对资源进行加锁。TAS lock是最简单的spinlock。当然spinlock可以用信号量来实现。但是据PostgreSQL的早期报告显示,内核提供的信号量将大大降低性能。所以学习TAS lock对我们提高软件性能是大有帮助的。
TAS就是Test And Set。它要做的就是跟一个变量进行Test。如果条件满足对其Set另外一个值,如果条件不满足,就继续等待。但是所有这些都是原子操作。
void spin_lock(lock)
{
  while(test_and_set(lock,true))
   ;
}

void spin_unlock(lock)
{
  atomic_set(lock,false);
}

Windows提供了一个API:InterlockedCompareExchange。PostgreSQL的Windows版本就是利用它来实现TAS的。
下面的Demo就是看看这个API是怎么用的。
#include <windows.h>
#include <iostream>

using namespace std;

void main()
{
	LONG source = 1;

	cout<<"before: "<<source<<endl;

	for(;;)
	{
		if(1==InterlockedCompareExchange(&source,2,1))
		{
			break;
		}
	}

	cout<<"after: "<<source<<endl;
}

PostgreSQL是如何定义TAS的呢?
typedef LONG slock_t;
#define TAS(lock) (InterlockedCompareExchange(lock, 1, 0))
分享到:
评论
7 楼 mathgl 2010-04-23  
spinlock 会导致一种 liveness hazard的现象。。都在频繁等待其他线程......
6 楼 七猫 2010-04-21  
对我们大部分人来说,无需要考虑像CRITICALSECTION的性能问题。
5 楼 七猫 2010-04-21  
这个东东看过好多种实现,如果预计锁的时间比较长,感觉还是不用这处方法。
好像有的地方会在interlock之间加些像pause之类的汇编指令。
4 楼 ray_linn 2010-04-21  
This function generates a full memory barrier (or fence) to ensure that memory operations are completed in order.
3 楼 wandou 2010-04-21  
spinlock不会增加cpu时间吗?不会有比spinlock性能更低的写法了吧?
2 楼 Aoogoo 2010-02-10  
1.是否能用信号量实现spinlock,我还不确定。但是用内核对象会增加CPU时间,其中一个重要的原因是Cache失配率会陡增。
2.InterlockedCompareExchange()带有全局的内存栅障,所以不用volatile。PostgresSQL也麽可有用volatile。
1 楼 mikeandmore 2010-02-10  
1 spinlock和信号量本身就是两个东西。spinlock就是纯userspace的lock。信号量是内核的,不能用信号量实现spinlock
2 InterlockedCompareExchange有barrier么?你那个source是不是还要volatile?

相关推荐

    windows下编译postgresql源码编译环境搭建

    在Windows环境下编译PostgreSQL源码是一项技术性较强的任务,涉及到多个步骤和工具。PostgreSQL是一种开源的关系型数据库管理系统,其源代码可以在多种操作系统上编译,包括Windows。以下是详细的编译过程和所需环境...

    postgreSQL源码

    在本案例中,"PostgreSQL from github" 指的是从GitHub上获取的PostgreSQL项目的源码仓库。 PostgreSQL的源码包含了许多组成部分,如服务器端程序、客户端工具、库文件以及文档等。"postgres-master"这个文件名可能...

    postgresql-42.3.1-API文档-中文版.zip

    Maven坐标:org.postgresql:postgresql:42.3.1; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    Linux环境PostgreSQL源码编译安装1

    4. 编译和安装PostgreSQL: ``` make make install ``` 5. 安装contrib目录中的附加工具: ``` cd /usr/local/postgresql/contrib make make install ``` 6. 设置环境变量,使得命令行可以找到PostgreSQL...

    PostgreSQL修炼之道 从小工到专家.pptx

    PostgreSQL修炼之道:从小工到专家 PostgreSQL是一种功能强大且广泛应用的开源关系型数据库管理系统,本书...本书对于提高PostgreSQL能力具有很高的价值,适合PostgreSQL初学者和有一定基础的开发者和技术管理人员。

    Postgresql源码解读.docx

    4500页的源码解读 光是SELECT语句相关实现,就阐述了300多页 看完了你就是postgreSQL达人了 章节明细,需要精读那个功能点就仔细看

    Ubuntu 下源码安装Postgresql

    Ubuntu 下源码安装 Postgresql PostgreSQL 是一个功能强大且开源的关系数据库管理系统,广泛应用于各种行业和领域。以下是 Ubuntu 下源码安装 Postgresql 的详细过程: 一、切换到 ROOT 账户并创建 Softwares 目录...

    PostgreSQL 14.1 中文手册

    PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组

    postgresql_maestro(ver:15.4.0.2),postgresql数据库管理工具

    postgresql数据库管理工具,PostgreSQL Maestro是首屈一指的PostgreSQL管理工具,数据库管理,控制和开发。该应用程序还为您提供了一套强大的工具,编辑和执行SQL脚本,构建数字数据的可视化图表,撰写OLAP多维数据...

    PostgreSQL博客1

    总的来说,PostgreSQL的源码解读涉及到多方面的知识,包括但不限于数据库设计、并发控制、事务处理、查询优化等。通过学习这些内容,我们可以更有效地使用和定制PostgreSQL,以满足各种复杂业务需求。

    通过源码安装PostgreSQL

    【源码安装PostgreSQL】是一种在Linux和UNIX兼容系统中安装数据库服务器的方法,适用于那些希望对安装过程有更多控制或需要编译特定版本的用户。PostgreSQL的源代码可以从其官方网站http://www.postgresql.org获取,...

    PostgreSQL源码

    PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。 POSTGRES 领先的许多概念只是在非常迟的时候才出现在商业数据库中。  PostgreSQL 是最初的...

    PostGreSQL安装部署系列:Centos 7.9 安装指定PostGreSQL-15版本数据库

    ### PostGreSQL在Centos 7.9上的安装与部署 #### 一、引言 ...PostgreSQL的强大功能和高度的可扩展性使其成为众多应用场景的理想选择,无论是开发人员还是DBA,掌握其安装与配置流程都是十分必要的基础技能。

    postgresql-http-server:PostgreSQL HTTP API服务器

    PostgreSQL HTTP API服务器注意:该项目处于无限期搁置状态,并已由取代尝试在上实施类似建议的内容正在安装注意:需要node.js # npm install postgresql-http-server用法# postgresql-... --port ...

    NetBackup91_AdminGuide_PostgreSQL.pdf

    Veritas NetBackup™ for PostgreSQL 管理指南 本文档是 Veritas NetBackup™ for PostgreSQL 管理指南,适用于 Windows 和 Linux 版本 9.1。该指南提供了详细的管理信息,帮助用户正确地安装、配置和使用 Veritas ...

    postgresql源码包编译安装.docx

    Postgresql 源码包编译安装 Postgresql 是一种开源的关系型数据库管理系统,它具有高性能、可靠性强、安全性高、支持多种操作系统等特点。今天,我们将介绍如何从源码包编译安装 Postgresql。 一、创建LV并格式化...

    postgresql-42.2.2-API文档-中文版.zip

    Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...

    PostgreSQL技术内幕:事务处理深度探索.docx

    PostgreSQL 的事务处理机制是数据库系统中非常重要的一个环节,它确保了数据的一致性和完整性。 在本文中,我们将深入探讨 PostgreSQL 的事务处理机制,包括事务的基本概念、事务处理的原理、事务处理的优化方案等...

Global site tag (gtag.js) - Google Analytics