国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于多線程并發(fā)-線程同步-系統(tǒng)實現(xiàn)

這篇具有很好參考價值的文章主要介紹了基于多線程并發(fā)-線程同步-系統(tǒng)實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

系統(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、使用示例

#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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java并發(fā)編程(三)線程同步 上[synchronized/volatile]

    Java并發(fā)編程(三)線程同步 上[synchronized/volatile]

    當(dāng)使用多個線程來訪問同一個數(shù)據(jù)時,將會導(dǎo)致數(shù)據(jù)不準(zhǔn)確,相互之間產(chǎn)生沖突,非常容易出現(xiàn)線程安全問題,比如多個線程都在操作同一數(shù)據(jù),都打算修改商品庫存,這樣就會導(dǎo)致數(shù)據(jù)不一致的問題。 所以我們通過線程同步機(jī)制來保證線程安全,加入同步鎖以避免在該線程沒有完成

    2024年02月13日
    瀏覽(29)
  • 金三銀四-解鎖Java并發(fā)編程的藝術(shù):掌握多線程、同步和并發(fā)控制的精髓

    ? ? ? ? 又要快到一年一度的金三銀四,開始復(fù)習(xí)啦~! ? ? ? ? 每天一點(diǎn)點(diǎn)。。 目錄 一、Java中的volatile有什么作用? 二、解釋Java中的synchronized及其工作原理。 三、Java中的CAS操作是什么?它如何實現(xiàn)無鎖編程? 四、講述Java中的Lock接口及其與synchronized的區(qū)別

    2024年01月17日
    瀏覽(33)
  • [計網(wǎng)底層小探索]:實現(xiàn)并部署多線程并發(fā)Tcp服務(wù)器框架(基于生產(chǎn)者消費(fèi)者模型的線程池結(jié)構(gòu))

    [計網(wǎng)底層小探索]:實現(xiàn)并部署多線程并發(fā)Tcp服務(wù)器框架(基于生產(chǎn)者消費(fèi)者模型的線程池結(jié)構(gòu))

    網(wǎng)絡(luò)層與傳輸層 內(nèi)置于操作系統(tǒng)的內(nèi)核中 ,網(wǎng)絡(luò)層一般使用 ip 協(xié)議,傳輸層常用協(xié)議為 Tcp 協(xié)議和 Udp 協(xié)議, Tcp 協(xié)議和 Udp 協(xié)議擁有各自的特點(diǎn)和應(yīng)用場景: sockaddr_in 結(jié)構(gòu)體用于存儲網(wǎng)絡(luò)通信主機(jī)進(jìn)程的 ip 和端口號等信息 小項目的完整文件的gittee鏈接 Tcp 服務(wù)器架構(gòu): 序列反序列

    2024年02月22日
    瀏覽(23)
  • 【并發(fā)編程】自研數(shù)據(jù)同步工具的優(yōu)化:創(chuàng)建線程池多線程異步去分頁調(diào)用其他服務(wù)接口獲取海量數(shù)據(jù)

    前段時間在做一個數(shù)據(jù)同步工具,其中一個服務(wù)的任務(wù)是調(diào)用A服務(wù)的接口,將數(shù)據(jù)庫中指定數(shù)據(jù)請求過來,交給kafka去判斷哪些數(shù)據(jù)是需要新增,哪些數(shù)據(jù)是需要修改的。 剛開始的設(shè)計思路是,,我創(chuàng)建多個服務(wù)同時去請求A服務(wù)的接口,每個服務(wù)都請求到全量數(shù)據(jù),由于這些

    2024年02月12日
    瀏覽(24)
  • 基于永磁同步發(fā)電機(jī)的風(fēng)力發(fā)電系統(tǒng)研究(Simulink實現(xiàn))

    基于永磁同步發(fā)電機(jī)的風(fēng)力發(fā)電系統(tǒng)研究(Simulink實現(xiàn))

    ????????? 歡迎來到本博客 ???????? ??博主優(yōu)勢: ?????? 博客內(nèi)容盡量做到思維縝密,邏輯清晰,為了方便讀者。 ?? 座右銘: 行百里者,半于九十。 ?????? 本文目錄如下: ?????? 目錄 ??1 概述 ??2 運(yùn)行結(jié)果 ??3?參考文獻(xiàn) ??4 Simulink實現(xiàn) 經(jīng)過對基

    2024年02月07日
    瀏覽(20)
  • 線程條件控制實現(xiàn)線程的同步

    線程條件控制實現(xiàn)線程的同步

    ????????前面講了互斥鎖,但是總感覺有些功能互斥鎖有些不夠用。 ? ?條件變量是線程另一可用的同步機(jī)制。條件變量給多個線程提供了一個會合的場所。條件變量與互斥量一起使用時,允許線程以無競爭的方式等待特定的條件發(fā)生。 條件本身是由互斥量保護(hù)的。線程

    2024年02月05日
    瀏覽(21)
  • Linux--線程-條件控制實現(xiàn)線程的同步

    Linux--線程-條件控制實現(xiàn)線程的同步

    1.條件變量 條件變量是線程另一可用的同步機(jī)制。條件變量給多個線程提供了一個會合的場所。條件變量與互斥量一起使用時,允許線程以無競爭的方式等待特定的條件發(fā)生。 條件本身是由互斥量保護(hù)的。線程在改變條件狀態(tài)前必須首先鎖住互斥量,其他線程在獲得互斥量之

    2024年02月05日
    瀏覽(23)
  • 【多線程面試題 六】、 如何實現(xiàn)線程同步?

    【多線程面試題 六】、 如何實現(xiàn)線程同步?

    文章底部有個人公眾號: 熱愛技術(shù)的小鄭 。主要分享開發(fā)知識、學(xué)習(xí)資料、畢業(yè)設(shè)計指導(dǎo)等。有興趣的可以關(guān)注一下。為何分享? 踩過的坑沒必要讓別人在再踩,自己復(fù)盤也能加深記憶。利己利人、所謂雙贏。 面試官: 如何實現(xiàn)線程同步? 參考答案: 1、同步方法 即有

    2024年02月08日
    瀏覽(18)
  • 操作系統(tǒng)-進(jìn)程和線程-同步、互斥、死鎖

    操作系統(tǒng)-進(jìn)程和線程-同步、互斥、死鎖

    目錄 一、同步互斥 ?二、互斥的實現(xiàn)方法 2.1軟件實現(xiàn) 2.1.1單標(biāo)志法 2.1.2雙標(biāo)志先檢查 2.1.3雙標(biāo)志后檢查 2.1.4Petersons算法 2.2硬件實現(xiàn) 2.2.1 TestAndSet指令 2.2.2 Swap指令? ?三、信號量機(jī)制 3.1整形變量 ?3.2 記錄型變量 ?3.3用信號量實現(xiàn)進(jìn)程互斥、同步、前驅(qū)關(guān)系 3.3.1互斥 ?3.3.2同步

    2024年02月08日
    瀏覽(95)
  • Java多線程——并發(fā)和并行、實現(xiàn)方法

    Java多線程——并發(fā)和并行、實現(xiàn)方法

    代碼演示 方式一 方式二 方式三

    2024年01月16日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包