日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C/C++ pthread 线程库的封装

發布時間:2025/3/15 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C/C++ pthread 线程库的封装 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

經常沒事寫一些服務器壓力測試的工具,如http,mysql,等。說到壓力測試,首先想到的應該就是多線程,研究過一段時間的pthread,包括線程鎖,在這里發一個自己寫的Posix封裝,可用于很多需要使用到多線程的情景當中。


Posix.h

Posix應該把它當成一個父類,寫一個子類繼承他,并重寫action方法,action()為所有的線程所執行的內容,最后使用Run()開始執行所有線程。

#ifndef?POSIX_H_ #define?POSIX_H_#include?<iostream> #include?<pthread.h> #include?<unistd.h> #include?<stdlib.h>using?namespace?std;class?Posix?{ public:Posix();int?getThreadNumber(void);??//獲取線程數int?pthreadMutexInit(void);??//初始化線程鎖,如果不希望使用鎖可以不用,有關鎖的更多,在后面介紹int?pthreadMutexLock(void);??//加鎖int?pthreadMutexUnlock(void);?//解鎖int?pthreadMutexDestroy(void);?//銷毀鎖void?setThreadNumber(int?threadNumber);?//設置開啟的線程數void?Run();????????????????????//所有線程開始執行virtual?void?action()=0;????????//每個線程執行的內容,在子類中重寫 protected:/*線程數*/int?_threadNumber;/*線程鎖*/pthread_mutex_t?_mutex; };#endif?/*?POSIX_H_?*/



Posix.cpp

因為pthread_create()函數只接收函數指針,不接受C++成員函數,所以另外創建靜態函數actionRun()作為橋接。

#include?"Posix.h"Posix::Posix(){//初始化線程數為8_threadNumber?=?8; }static?void*?actionRun(void*?parm){Posix*?pt?=?(Posix*)parm;pt->action();????//執行子類重寫的虛函數return?NULL; }/*線程鎖初始化函數*/ int?Posix::pthreadMutexInit(void){return?pthread_mutex_init(&this->_mutex,NULL); }/*線程加鎖*/ int?Posix::pthreadMutexLock(void){return?pthread_mutex_lock(&this->_mutex); }/*線程解鎖*/ int?Posix::pthreadMutexUnlock(void){return?pthread_mutex_unlock(&this->_mutex); }/*銷毀鎖*/ int?Posix::pthreadMutexDestroy(void){return?pthread_mutex_destroy(&this->_mutex); }int?Posix::getThreadNumber(void){return?this->_threadNumber; } void?Posix::setThreadNumber(int?threadNumber){this->_threadNumber?=?threadNumber; }void?Posix::Run(){pthread_t?pthread[this->_threadNumber];?//線程數組for?(?int?count?=?1?;?count?<=?this->_threadNumber?;?count++?){?//開始創建線程//在此,因為pthread_create的第三個參數只接收函數指針,C++成員函數不能進行傳遞,所以創建actionRun為普通的靜態函數,作為橋接,具體實現請往上看actionRun();if?(?pthread_create(?&pthread[count]?,?NULL?,?actionRun?,?this)?!=?0?){cerr?<<?"線程創建失敗,線程號?=?"?<<?count?<<endl;}}for?(?int?count?=?1?;?count?<=?this->_threadNumber?;?count++?){if?(?pthread_join(?pthread[count],?NULL?)?!=?0?){cerr?<<?"線程執行失敗,線程號?=?"?<<?count?<<?endl;}} // cout?<<?"線程執行完成!"?<<?endl; }


上面是Posix父類的定義與實現,下面我們寫一個新的test類來繼承Posix類

test.h

重寫父類action()函數,把要做的事寫上,這里我們打印每個線程的ID

#ifndef?TEST_H_ #define?TEST_H_#include?"Posix.h"class?test?:?public?Posix?{ public:action(){cout?<<?pthread_self()?<<?endl;?//打印線程ID} }#endif?/*?TEST_H_?*/


下面是main.cpp

#include?"test.h" int?main(void){test*?mytest?=?new?test();mytest->setThreadNumber(10);?//設置線程數為10mytest->Run();return?0; }

執行結果:



下面是有關線程鎖的介紹。

在線程執行時,所有的線程是并發執行的,我們不希望線程之間搶占同一資源,如多個線程對同一個FILE指針進行寫操作,這樣會出現莫名其妙的問題,這時我們就要使用線程鎖,所以在main.cpp中我們用pthreadMutexInit()方法來初始化一下線程鎖

#include?<iostream> #include?"test.h"using?namespace?std;int?main(void){test*?mytest?=?new?test();mytest->pthreadMutexInit();?//初始化鎖mytest->setThreadNumber(10);mytest->Run();mytest->pthreadMutexDestroy();?//銷毀鎖return?0; }


同樣的,在每個線程執行的過程當中,當進行到某個步驟的時候,我們也可以為其設置加鎖和解鎖,例如所有線程需要對一個成員變量進行操作時,我們可以在其操作之前加鎖,操作完成后解鎖。

#ifndef?TEST_H_ #define?TEST_H_#include?"Posix.h"class?test?:?public?Posix?{ public:test();virtual?~test();void?action(){this->pthreadMutexLock();????//鎖住線程,形成隊列,先到的先執行cout?<<?pthread_self()?<<?endl;?//打印線程IDthis->pthreadMutexUnlock();??//解鎖線程} };#endif?/*?TEST_H_?*/


最后編譯時別忘了添加編譯選項: -lpthread

轉載于:https://blog.51cto.com/xzx951753/1716088

總結

以上是生活随笔為你收集整理的C/C++ pthread 线程库的封装的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 2018天天干天天操 | 日韩精品欧美在线 | av猫咪| av一级在线观看 | 一色屋免费视频 | 日产精品久久久久久久 | 无码少妇精品一区二区免费动态 | 大尺度舌吻呻吟声 | 久久福利网站 | 欧美黄色大全 | 亚洲欧美日韩偷拍 | 波多野结衣一区二区三区高清 | 久久久久亚洲AV成人无码国产 | 国产综合久久久久久鬼色 | 女人扒开双腿让男人捅 | 懂色一区二区二区av免费观看 | 波多野结衣潜藏淫欲 | 夜夜操夜夜摸 | 毛色毛片 | 91自啪 | 欧美美女色图 | 超碰人操 | 日本丰满少妇做爰爽爽 | 韩日a级片 | 日韩欧美不卡视频 | 久草免费在线视频 | 国内av| 无码人妻精品一区二区50 | 亚洲久操| 国产精品999视频 | 色呦呦一区二区 | 免费看日产一区二区三区 | 一区二区传媒有限公司 | 亚洲欧美日韩色 | 久久毛片基地 | avtt香蕉久久 | 日韩精品三区 | 91视频在线免费观看 | 日本黄色小说 | 插插插操操操 | 欧美亚洲综合在线 | 国产一级做a爱片久久毛片a | 国产成人无码AA精品区 | 成人在线电影网站 | 色偷偷888欧美精品久久久 | 高清日韩 | 亚洲在线免费观看 | 一本大道熟女人妻中文字幕在线 | 成人靠逼视频 | 114国产精品久久免费观看 | 成人性生活毛片 | 尤物网址在线观看 | 奇米第四色首页 | 强开乳罩摸双乳吃奶羞羞www | 成人深夜福利 | 狠狠搞狠狠干 | 亚洲深夜福利视频 | 噜噜噜视频 | 精品无码国产污污污在线观看 | wwwxxx在线| 亚洲h视频 | 91亚洲国产成人精品一区二三 | h片免费观看 | 日日噜噜噜夜夜爽爽狠狠 | 中文字幕日韩在线视频 | 超能一家人电影免费喜剧在线观看 | 亚洲国产精品一区 | 内射无码专区久久亚洲 | 亚洲av无码国产精品色午夜 | av特黄| 一区二区视频免费看 | 阿v天堂2017 欧美小视频在线观看 | 欧美日韩一区二区三区四区五区六区 | 国精产品一区二区 | 蜜臀av一区二区三区 | 亚洲男人在线 | jizz日本女人| 日韩成人免费观看 | 蜜臀久久99静品久久久久久 | 久久久久久久影视 | 尤物视频在线观看国产性感 | 在线不卡日韩 | sm调教羞耻姿势图片 | 亚洲欧美综合精品久久成人 | 色女人影院 | 精品久久久噜噜噜久久久 | 精品美女久久久 | 乱岳| 在线资源站 | 91免费在线观看网站 | 精品黑人一区二区三区久久 | 蜜桃久久av | 哺乳喂奶一二三区乳 | 黄色三级网 | 尤物精品在线 | 香蕉在线观看 | 一区二区三区有限公司 | 操操操操操操操操操 | 日本一区二区三区精品视频 |