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函数,绝大部

                                                                             //分的锁对象都在这里销毁

posted on 2012-04-09 11:35  Richard.FreeBSD  阅读(1472)  评论(0编辑  收藏  举报

导航