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))
分享到:
相关推荐
《PostgreSQL修炼之道:从小工到专家》的主要内容和特色: 全面且实践性强:本书从SQL基础、安装配置、数据类型、数据库的逻辑结构等基础知识一直讲到PostgreSQL的架构、技术内幕、特色功能、Standby、数据库优化...
Maven坐标:org.postgresql:postgresql:42.3.1; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
windows下编译postgresql源码编译环境搭建
4500页的源码解读 光是SELECT语句相关实现,就阐述了300多页 看完了你就是postgreSQL达人了 章节明细,需要精读那个功能点就仔细看
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。 POSTGRES 领先的许多概念只是在非常迟的时候才出现在商业数据库中。 PostgreSQL 是最初的...
工具软件,基于 https://blog.csdn.net/Kafka_yx/article/details/103132469 生成的dll
PostgreSQL from github
PostgreSQL HTTP API服务器注意:该项目处于无限期搁置状态,并已由取代尝试在上实施类似建议的内容正在安装注意:需要node.js # npm install postgresql-http-server用法# postgresql-... --port ...
postgresql数据库管理工具,PostgreSQL Maestro是首屈一指的PostgreSQL管理工具,数据库管理,控制和开发。该应用程序还为您提供了一套强大的工具,编辑和执行SQL脚本,构建数字数据的可视化图表,撰写OLAP多维数据...
Linux环境PostgreSQL源码编译安装Linux环境PostgreSQL源码编译安装Linux环境PostgreSQL源码编译安装PostgreSQL版
通过源码安装PostgreSQL
Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构...
PostgreSQL中生成的查询规划是由1到n个规划节点构成的规划树,其中最底层的节点为表扫描节点,用于从数据表中返回检索出的数据行。然而,不同的扫描节点类型代表着不同的表访问模式,如:顺序扫描、索引扫描,以及...
PostgreSQL 14.1 手册 PostgreSQL 全球开发组 翻译:彭煜玮1,PostgreSQL中文社区2文档翻译组
postgresql源码包编译安装
Maven坐标:org.postgresql:postgresql:42.2.2; 标签:postgresql、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和...
Linux 安装postgresql 源码ftp 地址,所有不同版本,官方下载地址
开源数据库PostgreSQL,动物园出的教材,值得推荐,值得品味,
PG源码解析系列之查询引擎源码技术探析,postgresql基础,postgresql源码,postgresql查询优化,postgresql查询引擎,postgresql源码解析