mysql 互斥_Mysql 中互斥锁的使用
本文介绍如在在多线程mysql代码开发中使用互斥锁。
mysql自己对c++的mutex又进行了一次封装,封装的代码可以在include/mysql/psi/mysql_thread.h 中找到。
下面大概地介绍下如何使用互斥锁。锁的生命周期大体为: 初始化锁-> *(上锁->解锁)->销毁锁。注 “*” 表示0个或多个。
初始化锁代码如下:
1.首先声明锁变量和 key变量, key是一个整型值
PSI_mutex_key key_dispatch;
mysql_mutex_t dispatch_mutex; //mysql_mutex_t是mysql封装的一个结构体,里面包含了c++的pthread_mutex_t
//这个一般在mysqld.cc中定义, 并且在mysqld.h中声明 extern
2.初始化锁
mysql_mutex_init(key_dispatch, &dispatch_mutex, MY_MUTEX_INIT_FAST); //这个也一般在mydqld.cc中初始化, 在mysqld.cc中有一个
//init_thread_environment函数,绝大多数的锁对象都在这
//里初始化
上锁代码如下:
mysql_mutex_lock(&dispatch_mutex); //这个在具体操作需要锁的代码块前添加
解锁代码如下:
mysql_mutex_unlock(&dispatch_mutex);//这个在具体操作需要锁的代码块前添加
销毁锁的代码如下:
mysql_mutex_destroy(&dispatch_mutex); //这个也一般在mydqld.cc中销毁,在mysqld.cc中有一个clean_up_mutexes函数,绝大部
//分的锁对象都在这里销毁
mysql 互斥_Mysql 中互斥锁的使用相关推荐
- mysql 互斥_MySql中互斥量mutex的实现
数据库中的Mutex量指的是一种用于保护一些临界资源的使用的信号量.当有线程需要使用这些临界资源时,会请求获得mutex量,请求成功的线程进入临界区,而请求失败的线程只能等待它释放这个mutex.互斥 ...
- mysql 并发 锁表_MySQL中的锁(表锁、行锁) 并发控制锁
https://github.com/MrLining/mysql/wiki/MySQL%E4%B8%AD%E7%9A%84%E9%94%81%EF%BC%88%E8%A1%A8%E9%94%81%E ...
- mysql中写锁定实例_MySQL中的锁
我学习MySQL是半路出家,刚开始接触的时候,只知道数据库的增删改查和事务,直到有一天数据库突然爆出(1205, 'Lock wait timeout exceeded; try restarting ...
- 阿里云mysql不让锁表_MySQL中InnoDB锁不住表的原因
MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-------------------------- ...
- mysql 金额_Mysql中金额使用DECIMAL类型
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
- mysql 存储过程 互斥_mysql中的存储过程和事务隔离
※存储过程 存储过程是保存在数据库上的一段可执行代码. 1.定义存储过程的语法是: Create procedure sp_name (参数..) Begin SQL语句 End; 2.调用它的方法: ...
- mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁
插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...
- mysql某个表被行锁了_MySQL中的锁(表锁、行锁)
锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...
- mysql 锁 代码_MySQL中的锁实例
表结构: id:自增主键,a:无索引,b:普通索引 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(4) NOT ...
最新文章
- 算法设计与分析之循环与递归
- 干货!图神经网络及其自监督学习
- Xshell 6 提示 要继续使用此程序,您必须应用最新的更新
- Go实现简单的RESTful_API
- http://sourceforge.net/projects/rtspdirectshow/
- 细说Python Lambda函数的用法,建议收藏!
- Windows下动态库的制作与使用
- java glob paths_java – 使用getPathMatcher的Glob模式
- P3930 SAC E#1 - 一道大水题 Knight
- oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
- 【PRML 学习笔记】附录 - 变分法 (Calculus of Variations)
- 使用Visual Studio 2017开发Linux程序
- CommandName 与 CommandArgument
- C++ 实现matlab高斯滤波函数imgaussfilt
- C++sort函数使用(成绩排名)
- 软件测试10年,如果再给我一次机会,我可能···
- 警告提示:Capturing ‘self‘ strongly in this block is likely to lead to a retain cycle
- (E1)ENVI-met介绍及下载
- 模拟量输入输出模块的用途是什么?
- Inno Setup 编程技术全图文教程(转载)
热门文章
- 【方法】数据增强(Data Augmentation)
- Linux - Linux下indent命令详解
- 光电直读远传水表好用吗?有什么优势吗?
- php referrer policy,HTTP的Referrer和Referrer Policy设置
- 手把手教你写一个中文聊天机器人
- 软件测试Bug的四种级别
- 全网最牛,接口测试-Fiddler手机抓包教程(含坑),吐血总结
- GPT-4不披露技术细节,马斯克批判其背离初心,OpenAI不“open“了
- iOS CLLocationManager定位
- Android常用的网络框架介绍和使用