系統(tǒng)實現(xiàn):相對于STL來說非標(biāo)準(zhǔn)的實現(xiàn),Linux和Windows平臺各自的實現(xiàn)。
線程同步:通過限制多個線程同時執(zhí)行某段代碼來保護(hù)資源的。
一、linux互斥體
1、線程互斥量 pthread_mutex_t 的初始化
a、定義再初始化:
pthread_mutex_t mymutex;//定義互斥體
pthread_mutex_init(&mymutex, NULL);// 初始化
pthread_mutex_init函數(shù)的第二個參數(shù)attr是定義互斥鎖的屬性,一般為NULL。成功初始化返回0,否則返回其他值(錯誤編號)。
互斥鎖的屬性在創(chuàng)建鎖的時候指定,在LinuxThreads實現(xiàn)中僅有一個鎖類型屬性,不同的鎖類型在試圖對一個已經(jīng)被鎖定的互斥鎖加鎖時表現(xiàn)不同。當(dāng)前(glibc2.2.3,linuxthreads0.9)有四個值可供選擇:
-
PTHREAD_MUTEX_TIMED_NP,這是缺省值,也就是普通鎖。當(dāng)一個線程加鎖以后,其余請求鎖的線程將形成一個等待隊列,并在解鎖后按優(yōu)先級獲得鎖。這種鎖策略保證了資源分配的公平性。
-
PTHREAD_MUTEX_RECURSIVE_NP,嵌套鎖,允許同一個線程對同一個鎖成功獲得多次,并通過多次unlock解鎖。如果是不同線程請求,則在加鎖線程解鎖時重新競爭。
-
PTHREAD_MUTEX_ERRORCHECK_NP,檢錯鎖,如果同一個線程請求同一個鎖,則返回EDEADLK,否則與PTHREAD_MUTEX_TIMED_NP類型動作相同。這樣就保證當(dāng)不允許多次加鎖時不會出現(xiàn)最簡單情況下的死鎖。
-
PTHREAD_MUTEX_ADAPTIVE_NP,適應(yīng)鎖,動作最簡單的鎖類型,僅等待解鎖后重新競爭。
b、定義同時初始化
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
2、獲取鎖
a、阻塞接口
int ret = pthread_mutex_lock(&mymutex);// 阻塞鎖定,
當(dāng)該鎖已經(jīng)被占據(jù)時掛起等待。
b、非阻塞接口
int ret = pthread_mutex_trylock(&mymutex);//非阻塞式鎖定,
當(dāng)該鎖已經(jīng)被占據(jù)時返回EBUSY,而不是掛起等待。
3、解鎖
ret = pthread_mutex_unlock(&mymutex);// 解鎖
4、銷毀
ret = pthread_mutex_destroy(&mymutex);// 銷毀
5、使用示例文章來源:http://www.zghlxwxcb.cn/news/detail-475262.html
#include<pthread.h>
int main()
{
pthread_mutex_t mymutex;//定義互斥體
pthread_mutex_init(&mymutex, NULL);// 初始化
int ret = pthread_mutex_lock(&mymutex);// 阻塞鎖定,
//int ret = pthread_mutex_trylock(&mymutex);//非阻塞式鎖定,
ret = pthread_mutex_unlock(&mymutex);// 解鎖
ret = pthread_mutex_destroy(&mymutex);// 銷毀
}
二、Windows臨界區(qū)(critical section)
//創(chuàng)建:
CRITICAL_SECTION my_winsec;//創(chuàng)建windows中的臨界區(qū),類似與互斥量,使用前必須初始化
//初始化:(通常在類構(gòu)造函數(shù)中初始化)
InitializeCriticalSection(&my_winsec);//初始化臨界區(qū)
//臨界區(qū)使用:
EnterCriticalSection(&my_winsec);//進(jìn)入臨界區(qū)(加鎖)
myQueue.push_back(i);
LeaveCriticalSection(&my_winsec);//離開臨界區(qū)(解鎖)
有錯誤或不足歡迎評論指出!創(chuàng)作不易,轉(zhuǎn)載請注明出處。如有幫助,記得點(diǎn)贊關(guān)注哦(⊙o⊙)
更多內(nèi)容請關(guān)注個人博客:https://blog.csdn.net/qq_43148810文章來源地址http://www.zghlxwxcb.cn/news/detail-475262.html
到了這里,關(guān)于基于多線程并發(fā)-線程同步-系統(tǒng)實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!