本文介绍如在在多线程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函数,绝大部
//分的锁对象都在这里销毁