Mysql 中互斥锁的使用
2015-01-18 20:14
260 查看
本文介绍如在在多线程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自己对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报错显示Reason: im…
- Mysql 中List的使用
- Mysql 复合唯一键值的使用--O…
- mySQL alter使用方法
- MySQL中UNION和UNION ALL的使用
- MySQL 5.6 使用过程中碰…
- mysql 使用命令行导入导出sql脚本
- 使用源码build mysql5.5 以及 在进…
- iPhone LumaQQ聊天软件详细使用教程
- 【转】Linux下使用C语言连接Mysql (commands out of sync, you can't run ...)
- 如何解决Mysql "发生系统错误2,找不到指定的文件" 的问题(第一次安装使用)
- 不使用ISAPI或IIS wildcard实现不带扩展名URL的转向
- 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null')
- 比分先知道 iScores球赛信息详细使用教程
- 使用jdbc连接mysql 出现 java.sql.Exception: this specifer does...(root@'%')..doesn't exist.
- XML 问题: 超越DOM(轻松使用 DOM 的技巧和诀窍)
- 使用TOMCAT5.5连接池连接mysql(解决Cannot create JDBC driver of class '' for connect URL 'null')
- Linux下的进程通信(IPC)&& 应用程序互斥锁mutex的使用
- 新版iPhone PC Suite完全详细使用教程