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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

互斥锁属性PTHREAD_MUTEX_RECURSIVE

發(fā)布時(shí)間:2024/2/28 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 互斥锁属性PTHREAD_MUTEX_RECURSIVE 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

四、互斥鎖屬性

???????線(xiàn)程和線(xiàn)程的同步對(duì)象(互斥量,讀寫(xiě)鎖,條件變量)都具有屬性。在修改屬性前都需要對(duì)該結(jié)構(gòu)進(jìn)行初始化。使用后要把該結(jié)構(gòu)回收。我們用pthread_ mutexattr_init函數(shù)對(duì)pthread_mutexattr結(jié)構(gòu)進(jìn)行初始化,用pthread_mutexattr_destroy函數(shù)對(duì)該結(jié)構(gòu)進(jìn)行回收。

?

4

名稱(chēng)::

pthread_mutexattr_init/pthread_mutexattr_destroy

功能:

初始化/回收pthread_mutexattr_t結(jié)構(gòu)

頭文件:

#include <pthread.h>

函數(shù)原形:

int pthread_mutexattrattr_init(pthread_mutexattr_t *attr);

int pthread_mutexattrattr_destroy( pthread_mutexattr_t *attr );

參數(shù):

attr????pthread_mutexattr_t結(jié)構(gòu)變量

返回值:

若成功返回0,若失敗返回錯(cuò)誤編號(hào)。

??????

?

?

???????pthread_mutexattr_init將屬性對(duì)象的值初始化為缺省值。并分配屬性對(duì)象占用的內(nèi)存空間。

attr中pshared屬性表示用這個(gè)屬性對(duì)象創(chuàng)建的互斥鎖的作用域,它的取值可以是PTHREAD_PROCESS_PRIVATE(缺省值,表示由這個(gè)屬性對(duì)象創(chuàng)建的互斥鎖只能在進(jìn)程內(nèi)使用)或PTHREAD_PROCESS_SHARED。

?

互斥量屬性分為共享互斥量屬性和類(lèi)型互斥量屬性。兩種屬性分別由不同的函數(shù)得到并由不同的函數(shù)進(jìn)行修改。pthread_mutexattr_getpshared和pthread_mutexattr_setpshared函數(shù)可以獲得和修改共享互斥量屬性。pthread_mutexattr_gettype和pthread_mutexattr_settype函數(shù)可以獲得和修改類(lèi)型互斥量屬性。下面我們分別介紹。

?

5

名稱(chēng)::

pthread_mutexattr_getpshared/pthread_mutexattr_setpshared

功能:

獲得/修改共享互斥量屬性

頭文件:

#include <pthread.h>

函數(shù)原形:

int pthread_mutexattrattr_ getpshared ( const pthread_attr_t *restrict attr,int*restrict pshared);

int pthread_mutexattrattr_ setpshared (??const pthread_attr_t *restrict attr,int pshared);

參數(shù):

?

返回值:

若成功返回0,若失敗返回錯(cuò)誤編號(hào)。

?

?

?

?

?

?

共享互斥量屬性用于規(guī)定互斥鎖的作用域。互斥鎖的域可以是進(jìn)程內(nèi)的也可以是進(jìn)程間的。pthread_mutexattrattr_ getpshared可以返回屬性對(duì)象的互斥鎖作用域?qū)傩浴?梢允且韵轮?#xff1a;PTHREAD_PROCESS_SHARED,PTHREAD_PROCESS_PRIVATE。如果互斥鎖屬性對(duì)象的pshared屬性被置PTHREAD_PROCESS_SHARED。那么由這個(gè)屬性對(duì)象創(chuàng)建的互斥鎖將被保存在共享內(nèi)存中,可以被多個(gè)進(jìn)程中的線(xiàn)程共享。如果pshared屬性被置為PTHREAD_PROCESS_PRIVATE,那么只有和創(chuàng)建這個(gè)互斥鎖的線(xiàn)程在同一個(gè)進(jìn)程中的線(xiàn)程才能訪(fǎng)問(wèn)這個(gè)互斥鎖。

?

6

名稱(chēng)::

pthread_mutexattr_gettype/pthread_mutexattr_settype

功能:

獲得/修改類(lèi)型互斥量屬性

頭文件:

#include <pthread.h>

函數(shù)原形:

int pthread_mutexattrattr_ getpshared ( const pthread_attr_t *restrict attr,int*restrict pshared);

int pthread_mutexattrattr_ setpshared (??const pthread_attr_t *restrict attr,int pshared);

參數(shù):

?

返回值:

若成功返回0,若失敗返回錯(cuò)誤編號(hào)。

?

?

?

?

?

?

?

?

?

?

?

pthread_mutexattr_gettype函數(shù)可以獲得互斥鎖類(lèi)型屬性。缺省的互斥鎖類(lèi)型屬性是PTHREAD_MUTEX_DEFAULT。

合法的類(lèi)型屬性值有:

PTHREAD_MUTEX_NORMAL;

PTHREAD_MUTEX_ERRORCHECK;

PTHREAD_MUTEX_RECURSIVE;

PTHREAD_MUTEX_DEFAULT。

類(lèi)型說(shuō)明:

PTHREAD_MUTEX_NORMAL

這種類(lèi)型的互斥鎖不會(huì)自動(dòng)檢測(cè)死鎖。如果一個(gè)線(xiàn)程試圖對(duì)一個(gè)互斥鎖重復(fù)鎖定,將會(huì)引起這個(gè)線(xiàn)程的死鎖。如果試圖解鎖一個(gè)由別的線(xiàn)程鎖定的互斥鎖會(huì)引發(fā)不可預(yù)料的結(jié)果。如果一個(gè)線(xiàn)程試圖解鎖已經(jīng)被解鎖的互斥鎖也會(huì)引發(fā)不可預(yù)料的結(jié)果。

?

PTHREAD_MUTEX_ERRORCHECK

這種類(lèi)型的互斥鎖會(huì)自動(dòng)檢測(cè)死鎖。如果一個(gè)線(xiàn)程試圖對(duì)一個(gè)互斥鎖重復(fù)鎖定,將會(huì)返回一個(gè)錯(cuò)誤代碼。如果試圖解鎖一個(gè)由別的線(xiàn)程鎖定的互斥鎖將會(huì)返回一個(gè)錯(cuò)誤代碼。如果一個(gè)線(xiàn)程試圖解鎖已經(jīng)被解鎖的互斥鎖也將會(huì)返回一個(gè)錯(cuò)誤代碼。

?

PTHREAD_MUTEX_RECURSIVE

如果一個(gè)線(xiàn)程對(duì)這種類(lèi)型的互斥鎖重復(fù)上鎖,不會(huì)引起死鎖,一個(gè)線(xiàn)程對(duì)這類(lèi)互斥鎖的多次重復(fù)上鎖必須由這個(gè)線(xiàn)程來(lái)重復(fù)相同數(shù)量的解鎖,這樣才能解開(kāi)這個(gè)互斥鎖,別的線(xiàn)程才能得到這個(gè)互斥鎖。如果試圖解鎖一個(gè)由別的線(xiàn)程鎖定的互斥鎖將會(huì)返回一個(gè)錯(cuò)誤代碼。如果一個(gè)線(xiàn)程試圖解鎖已經(jīng)被解鎖的互斥鎖也將會(huì)返回一個(gè)錯(cuò)誤代碼。這種類(lèi)型的互斥鎖只能是進(jìn)程私有的(作用域?qū)傩詾镻THREAD_PROCESS_PRIVATE)。

?

PTHREAD_MUTEX_DEFAULT

這種類(lèi)型的互斥鎖不會(huì)自動(dòng)檢測(cè)死鎖。如果一個(gè)線(xiàn)程試圖對(duì)一個(gè)互斥鎖重復(fù)鎖定,將會(huì)引起不可預(yù)料的結(jié)果。如果試圖解鎖一個(gè)由別的線(xiàn)程鎖定的互斥鎖會(huì)引發(fā)不可預(yù)料的結(jié)果。如果一個(gè)線(xiàn)程試圖解鎖已經(jīng)被解鎖的互斥鎖也會(huì)引發(fā)不可預(yù)料的結(jié)果。POSIX標(biāo)準(zhǔn)規(guī)定,對(duì)于某一具體的實(shí)現(xiàn),可以把這種類(lèi)型的互斥鎖定義為其他類(lèi)型的互斥鎖。

?

五、應(yīng)用互斥量需要注意的幾點(diǎn)

???????1、互斥量需要時(shí)間來(lái)加鎖和解鎖。鎖住較少互斥量的程序通常運(yùn)行得更快。所以,互斥量應(yīng)該盡量少,夠用即可,每個(gè)互斥量保護(hù)的區(qū)域應(yīng)則盡量大。

2、互斥量的本質(zhì)是串行執(zhí)行。如果很多線(xiàn)程需要領(lǐng)繁地加鎖同一個(gè)互斥量,

則線(xiàn)程的大部分時(shí)間就會(huì)在等待,這對(duì)性能是有害的。如果互斥量保護(hù)的數(shù)據(jù)(或代碼)包含彼此無(wú)關(guān)的片段,則可以特大的互斥量分解為幾個(gè)小的互斥量來(lái)提高性能。這樣,任意時(shí)刻需要小互斥量的線(xiàn)程減少,線(xiàn)程等待時(shí)間就會(huì)減少。所以,互斥量應(yīng)該足夠多(到有意義的地步),每個(gè)互斥量保護(hù)的區(qū)域則應(yīng)盡量的少。

總結(jié)

以上是生活随笔為你收集整理的互斥锁属性PTHREAD_MUTEX_RECURSIVE的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。