多執行緒的一大優點就是資源共享,可以很方便的進行通訊,但當對共享資源操作時,有時還需要鎖操作。
為了既保證共享資源又增加系統併發量,mysql使用了很多函式庫來代替標準庫函式(在mysys資料夾下面定義)
而對於鎖的處理,mysql按照相關性將將全域性資源和變數分組,以組為單位進行加鎖
全域性鎖以lock_開頭,在mysql_priv.h檔案中定義
執行緒鎖以thr_lock_開頭,在my_thr_init.c中定義
執行緒同步使用條件變數來實現,以cond_開頭,與鎖結合使用。
啟動伺服器
伺服器啟動**在sql/mysqld.cc中實現。
#ifdef __win__int win_main(int argc, char **argv)
#else
int main(int argc, char **argv)
#endif
……
mysqld呼叫的主要函式如下:
my_init(argv[0]); //初始化執行緒和mysql庫函式,呼叫my_init()函式
logger.init_base(); //初始化日誌類
/*初始化全域性變數,給mysql設定預設引數*/
if (init_common_variables(mysql_config_name,argc, argv, load_default_groups))
unireg_abort(1);
init_signals(); //初始化各種同步訊號
pthread_attr_setstacksize(&connection_attrib,my_thread_stack_size*2);//設定執行緒棧,my_thread_stack_size預設大小為65536
。。。。。。
/*檢查使用者*/
if ((user_info= check_user(mysqld_user)))
if (init_server_components()) //初始化伺服器模組unireg_abort(1);
network_init();//初始化網路子系統
acl_init(opt_noacl);//初始化acl
create_shutdown_thread(); //建立關閉執行緒
start_handle_manager();
handle_connections_sockets(0); //服務處理函式,等待接受命令
/*最後要進行清理以及等待執行緒結束*/
clean_up(1);
wait_for_signal_thread_to_end();
clean_up_mutexes();
my_end(opt_endinfo ? my_check_error | my_give_info : 0);
exit(0);
多執行緒讀寫mysql 多執行緒讀寫mysql資料庫
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 unsigned int stdcall scan pvoid pm char ip 20 strcpy ip,char pm mysql mysql mysql res result 初始化mysql控制代碼 mysql init mysql 連線my...
多執行緒筆記
1 stdin fileno 在unix一些系統呼叫中使用到stdin fileno表示標準輸入,stdout fileno表示標準輸出,stderr fileno表示標準出錯,使用時需要加標頭檔案 在unix下還有stdin,stdout,stderr表示同樣的含義。stdin fileno與st...
多執行緒筆記
一.程序 就是cpu所要執行的乙個任務 自己理解的 執行緒 執行緒是乙個併發執行的順序流,乙個程序包括多個順序執行流程,這執行流程稱為執行緒 就是任務中許多的 二.執行緒排程分配cpu的時間片段給不同的執行緒,得到時間片段的執行緒被cpu執行,其他執行緒等待,執行緒排程會盡可能的分配時間片段取執行。...