91在线观看视频-91在线观看视频-91在线观看免费视频-91在线观看免费-欧美第二页-欧美第1页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

linux多線程編程實(shí)例

jf_09640219 ? 來(lái)源:jf_09640219 ? 作者:jf_09640219 ? 2024-02-15 21:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

wKgaomXdr8qAXb3zAADgkiVmEsc585.png

之后按r運(yùn)行程序

進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。在面向線程設(shè)計(jì)的系統(tǒng)中,進(jìn)程本身不是基本運(yùn)行單位,而是線程的容器。程序本身只是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程才是程序(那些指令和數(shù)據(jù))的真正運(yùn)行實(shí)例。

線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。線程包含了表示進(jìn)程內(nèi)執(zhí)行環(huán)境必須的信息,其中包括進(jìn)程中表示線程的線程ID、一組寄存器值、棧、調(diào)度優(yōu)先級(jí)和策略、信號(hào)屏蔽字、errno常量以及線程私有數(shù)據(jù)。進(jìn)程的所有信息對(duì)該進(jìn)程的所有線程都是共享的,包括可執(zhí)行的程序文本、程序的全局內(nèi)存和堆內(nèi)存、棧以及文件描述符。在Unix和類Unix操作系統(tǒng)中線程也被稱為輕量級(jí)進(jìn)程(lightweight processes),但輕量級(jí)進(jìn)程更多指的是內(nèi)核線程(kernel thread),而把用戶線程(user thread)稱為線程。

一、線程同步之互斥量加鎖解鎖

1. 創(chuàng)建及銷毀互斥鎖

#include int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr); int pthread_mutex_destroy(pthread_mutex_t mutex); // 返回:若成功返回0,否則返回錯(cuò)誤編號(hào)

要用默認(rèn)的屬性初始化互斥量,只需把a(bǔ)ttr設(shè)置為NULL。

2. 加鎖及解鎖

#include int pthread_mutex_lock(pthread_mutex_t mutex); int pthread_mutex_trylock(pthread_mutex_t mutex); int pthread_mutex_unlock(pthread_mutex_t mutex); // 返回:若成功返回0,否則返回錯(cuò)誤編號(hào)

如果線程不希望被阻塞,它可以使用pthread_mutex_trylock嘗試對(duì)互斥量進(jìn)行加鎖。如果調(diào)用pthread_mutex_trylock時(shí)互斥量處于未鎖住狀態(tài),那么pthread_mutex_trylock將鎖住互斥量,不會(huì)出現(xiàn)阻塞并返回0,否則pthread_mutex_trylock就會(huì)失敗,不能鎖住互斥量,而返回EBUSY。

顧名思義就是加鎖某一個(gè)線程后,必須要等待此線程執(zhí)行完后解鎖,其他的線程才能夠進(jìn)行。在main函數(shù)里面加鎖后必須釋放鎖。

二、什么是死鎖

當(dāng)兩個(gè)或兩個(gè)以上的線程在執(zhí)行過(guò)程中,因?yàn)闋?zhēng)奪資源而造成的一種相互等待的狀態(tài),由于存在一種環(huán)路的鎖依賴關(guān)系而永遠(yuǎn)地等待下去,如果沒(méi)有外部干涉,他們將永遠(yuǎn)等待下去,此時(shí)的這個(gè)狀態(tài)稱之為死鎖。

例:創(chuàng)建2個(gè)互斥鎖,進(jìn)程1申請(qǐng)得到第一把鎖后,同時(shí)申請(qǐng)第二把鎖;進(jìn)程2申請(qǐng)得到第二把鎖后,同時(shí)申請(qǐng)第一把鎖。

wKgZomX1nNKAdKL2AACM0l5_73w264.png查找字符串

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

例:

定義一個(gè)全局變量a,讓全局變量a在線程1里面等于3的時(shí)候退出線程1,

方法一:加互斥鎖

方法二:引入條件量

wKgaomX1nVWALoxdAAPoTCRSR9k220.png

首先在線程1里面調(diào)用pthread_cond_wait函數(shù)等待條件量的觸發(fā),

wKgZomX1na6AbSa9AASqRlEBPDg613.png

在線程2中g(shù)_data達(dá)到3時(shí),調(diào)用函數(shù)pthread_cond_signal()來(lái)觸發(fā)條件量,

四、使用宏來(lái)靜態(tài)初始化

在使用互斥變量、條件變量前都必須進(jìn)行初始化,可以分別置為常量PTHREAD_MUTEX_INITIALIZER(只對(duì)靜態(tài)分配的互斥量)、PTHREAD_COND_INITIALIZER(只對(duì)靜態(tài)分配的條件變量),也可以通過(guò)調(diào)用pthread_mutex_init、pthread_cond_init函數(shù)進(jìn)行初始化。如果動(dòng)態(tài)地分配互斥量、條件變量(例如通過(guò)調(diào)用malloc函數(shù)),那么在釋放內(nèi)存前需要調(diào)用pthread_mutex_destroy,條件變量可以使用pthread_cond_destroy函數(shù)對(duì)條件變量進(jìn)行去除初始化(deinitialize)。

動(dòng)態(tài)初始化:

pthread_mutex_t mutex; //dynamic init
pthread_cond_t cond; //dynamic init

主函數(shù)中必須:

pthread_mutex_init(&mutex, NULL); //dynamic init
pthread_cond_init(&cond, NULL); //dynamic init

使用宏進(jìn)行初始化(靜態(tài)初始化):

pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; // static init
pthread_cond_t cond = PTHREAD_COND_INITIALIZER; // static init


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11511

    瀏覽量

    213845
  • 多線程編程
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    6820
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Linux多線程編程手冊(cè)

    Linux多線程編程手冊(cè)
    發(fā)表于 11-07 10:17

    Linux c多線程編程的4個(gè)實(shí)例

    Linux中最流行的線程機(jī)制為L(zhǎng)inuxThreads,下面以一個(gè)多線程編程實(shí)例來(lái)介紹該線程庫(kù)的
    發(fā)表于 10-17 09:32

    Linux c多線程編程的4個(gè)實(shí)例分享

    Linux c多線程編程的4個(gè)實(shí)例  在主流的操作系統(tǒng)中,多任務(wù)一般都提供了進(jìn)程和線程兩種實(shí)現(xiàn)方式,進(jìn)程享有獨(dú)立的進(jìn)程空間,而
    發(fā)表于 06-09 04:35

    嵌入式Linux多線程編程

    嵌入式Linux多線程編程-學(xué)習(xí)資源-華清遠(yuǎn)見(jiàn)清遠(yuǎn)見(jiàn)嵌入式學(xué)院:清遠(yuǎn)見(jiàn)嵌入式學(xué)院:《嵌入式應(yīng)用程序設(shè)計(jì)》——第5 章 嵌入式Linux 多線程
    發(fā)表于 11-05 06:54

    java多線程編程實(shí)例 (源程序)

    java多線程編程實(shí)例 import java.awt.*;import javax.swing.*; public class CompMover extends Object { 
    發(fā)表于 10-22 11:48 ?0次下載

    linux多線程編程課件

    電子發(fā)燒友為您提供了linux多線程編程課件,希望對(duì)您學(xué)習(xí) linux 有所幫助。部分內(nèi)容如下: *1、多線程模型在單處理器模型和多處理器系
    發(fā)表于 07-10 11:58 ?0次下載

    linux多線程編程開(kāi)發(fā)

    本文中我們針對(duì) Linux多線程編程的主要特性總結(jié)出 5 條經(jīng)驗(yàn),用以改善 Linux 多線程編程
    發(fā)表于 12-26 14:24 ?55次下載
    <b class='flag-5'>linux</b><b class='flag-5'>多線程</b><b class='flag-5'>編程</b>開(kāi)發(fā)

    多線程編程Linux線程編程

    9.2 Linux線程編程 9.2.1 線程基本編程 這里要講的線程相關(guān)操作都是用戶空間中的
    發(fā)表于 10-18 15:55 ?3次下載

    linux多線程編程技術(shù)

    (process)中只允許有一個(gè)線程,這樣多線程就意味著多進(jìn)程。現(xiàn)在,多線程技術(shù)已經(jīng)被許多操作系統(tǒng)所支持,包括Windows/NT,當(dāng)然,也包括Linux。 為什么有了進(jìn)程的概念后,還
    發(fā)表于 10-24 16:01 ?5次下載

    mfc多線程編程實(shí)例及代碼,mfc多線程間通信介紹

    摘要:本文主要以MFC多線程為中心,分別對(duì)MFC多線程實(shí)例、MFC多線程之間的通信展開(kāi)的一系列研究,下面我們來(lái)看看原文。
    發(fā)表于 12-08 15:23 ?1.8w次閱讀
    mfc<b class='flag-5'>多線程</b><b class='flag-5'>編程</b><b class='flag-5'>實(shí)例</b>及代碼,mfc<b class='flag-5'>多線程</b>間通信介紹

    什么是多線程編程?多線程編程基礎(chǔ)知識(shí)

    摘要:多線程編程是現(xiàn)代軟件技術(shù)中很重要的一個(gè)環(huán)節(jié)。要弄懂多線程,這就要牽涉到多進(jìn)程。本文主要以多線程編程以及
    發(fā)表于 12-08 16:30 ?1.3w次閱讀

    關(guān)于Linux多線程編程技術(shù)學(xué)習(xí)總結(jié)

    Linux多線程編程技術(shù) 作為一個(gè)IT人員,不斷的學(xué)習(xí)和總結(jié)是我們這個(gè)職業(yè)習(xí)慣,所以我會(huì)將每個(gè)階段的學(xué)習(xí)都會(huì)通過(guò)一點(diǎn)的總結(jié)來(lái)記錄和檢測(cè)自己的學(xué)習(xí)效果,今天為大家總結(jié)了關(guān)于Linux
    發(fā)表于 04-22 03:12 ?2388次閱讀
    關(guān)于<b class='flag-5'>Linux</b>下<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>技術(shù)學(xué)習(xí)總結(jié)

    Linux下的多線程編程

    的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。  下面我們先來(lái)嘗試編寫(xiě)一個(gè)簡(jiǎn)單的多線程程序。2 簡(jiǎn)單的多線程編程  
    發(fā)表于 04-02 14:43 ?718次閱讀

    Linux多線程編程的知識(shí)點(diǎn)

    Hello、Hello大家好,我是木榮,今天我們繼續(xù)來(lái)聊一聊Linux多線程編程中的重要知識(shí)點(diǎn),詳細(xì)談?wù)?b class='flag-5'>多線程中同步和互斥機(jī)制。
    發(fā)表于 04-26 17:27 ?734次閱讀
    <b class='flag-5'>Linux</b>中<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>的知識(shí)點(diǎn)

    mfc多線程編程實(shí)例

    (圖形用戶界面)應(yīng)用程序的開(kāi)發(fā)。在這篇文章中,我們將重點(diǎn)介紹MFC中的多線程編程多線程編程在軟件開(kāi)發(fā)中非常重要,它可以實(shí)現(xiàn)程序的并發(fā)執(zhí)行,提高程序的效率和響應(yīng)速度。MFC提供了豐富
    的頭像 發(fā)表于 12-01 14:29 ?1951次閱讀
    主站蜘蛛池模板: 中文字幕在线看精品乱码 | 午夜dy888理论在线播放 | 四虎影视永久在线精品免费播放 | 色多多在线播放 | 五月天婷婷网亚洲综合在线 | 成年网站在线看 | 亚洲三级电影 | 天天操人人 | 国产真实乱在线更新 | 性午夜影院 | 韩国在线免费视频 | 午夜肉伦伦影院在线观看 | 国产成人精品曰本亚洲78 | 我要看黄色一级毛片 | 免费播放一区二区三区 | 俺来也俺来也天天夜夜视频 | 丁香花五月天婷婷 | www 在线播放 | 成人午夜亚洲影视在线观看 | 91亚洲国产成人久久精品网站 | 午夜视频在线免费播放 | 月夜免费观看高清在线完整 | 伊人小婷婷色香综合缴缴情 | 四虎国产在线观看 | 日本黄视频网站 | 亚洲色图欧美激情 | 天天干夜夜操 | 天天弄 | 国产自产视频在线观看香蕉 | 色屁屁www影院免费观看视频 | 青青青草国产 | 国产成人精品1024在线 | 亚洲天堂免费 | 黄色网 在线播放 | 夜夜春夜夜夜夜猛噜噜噜噜噜 | 全免费午夜一级毛片真人 | a级黄视频| 殴美aⅴ| 男人透女人超爽视频免费 | 日本特黄色大片 | 一级特黄aaa大片免费看 |