本文介绍如在在多线程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 中互斥锁的使用相关推荐

  1. mysql 互斥_MySql中互斥量mutex的实现

    数据库中的Mutex量指的是一种用于保护一些临界资源的使用的信号量.当有线程需要使用这些临界资源时,会请求获得mutex量,请求成功的线程进入临界区,而请求失败的线程只能等待它释放这个mutex.互斥 ...

  2. 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 ...

  3. mysql中写锁定实例_MySQL中的锁

    我学习MySQL是半路出家,刚开始接触的时候,只知道数据库的增删改查和事务,直到有一天数据库突然爆出(1205, 'Lock wait timeout exceeded; try restarting ...

  4. 阿里云mysql不让锁表_MySQL中InnoDB锁不住表的原因

    MySQL中InnoDB锁不住表是因为如下两个参数的设置: mysql> show variables like '%timeout%'; +-------------------------- ...

  5. mysql 金额_Mysql中金额使用DECIMAL类型

    MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...

  6. mysql 存储过程 互斥_mysql中的存储过程和事务隔离

    ※存储过程 存储过程是保存在数据库上的一段可执行代码. 1.定义存储过程的语法是: Create procedure sp_name (参数..) Begin SQL语句 End; 2.调用它的方法: ...

  7. mysql什么情况会加意向锁_MySQL中的锁4-插入意向锁和自增锁

    插入意向锁(Insert Intention Lock) 插入意向锁本质上可以看成是一个Gap Lock 普通的Gap Lock 不允许 在 (上一条记录,本记录) 范围内插入数据 插入意向锁Gap ...

  8. mysql某个表被行锁了_MySQL中的锁(表锁、行锁)

    锁是计算机协调多个进程或纯线程并发访问某一资源的机制.在数据库中,除传统的计算资源(CPU.RAM.I/O)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性.有效性是所在有数 ...

  9. mysql 锁 代码_MySQL中的锁实例

    表结构: id:自增主键,a:无索引,b:普通索引 CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` int(4) NOT ...

最新文章

  1. 算法设计与分析之循环与递归
  2. 干货!图神经网络及其自监督学习
  3. Xshell 6 提示 要继续使用此程序,您必须应用最新的更新
  4. Go实现简单的RESTful_API
  5. http://sourceforge.net/projects/rtspdirectshow/
  6. 细说Python Lambda函数的用法,建议收藏!
  7. Windows下动态库的制作与使用
  8. java glob paths_java – 使用getPathMatcher的Glob模式
  9. P3930 SAC E#1 - 一道大水题 Knight
  10. oracle 删除用户和依赖,Oracle 12.2使用手动创建与注册依赖对象来执行联机重定义...
  11. 【PRML 学习笔记】附录 - 变分法 (Calculus of Variations)
  12. 使用Visual Studio 2017开发Linux程序
  13. CommandName 与 CommandArgument
  14. C++ 实现matlab高斯滤波函数imgaussfilt
  15. C++sort函数使用(成绩排名)
  16. 软件测试10年,如果再给我一次机会,我可能···
  17. 警告提示:Capturing ‘self‘ strongly in this block is likely to lead to a retain cycle
  18. (E1)ENVI-met介绍及下载
  19. 模拟量输入输出模块的用途是什么?
  20. Inno Setup 编程技术全图文教程(转载)

热门文章

  1. 【方法】数据增强(Data Augmentation)
  2. Linux - Linux下indent命令详解
  3. 光电直读远传水表好用吗?有什么优势吗?
  4. php referrer policy,HTTP的Referrer和Referrer Policy设置
  5. 手把手教你写一个中文聊天机器人
  6. 软件测试Bug的四种级别
  7. 全网最牛,接口测试-Fiddler手机抓包教程(含坑),吐血总结
  8. GPT-4不披露技术细节,马斯克批判其背离初心,OpenAI不“open“了
  9. iOS CLLocationManager定位
  10. Android常用的网络框架介绍和使用