在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

linux多線程編程實例

jf_09640219 ? 來源:jf_09640219 ? 作者:jf_09640219 ? 2024-02-15 21:16 ? 次閱讀

wKgaomXdr8qAXb3zAADgkiVmEsc585.png

之后按r運行程序

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

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

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

1. 創建及銷毀互斥鎖

#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,否則返回錯誤編號

要用默認的屬性初始化互斥量,只需把attr設置為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,否則返回錯誤編號

如果線程不希望被阻塞,它可以使用pthread_mutex_trylock嘗試對互斥量進行加鎖。如果調用pthread_mutex_trylock時互斥量處于未鎖住狀態,那么pthread_mutex_trylock將鎖住互斥量,不會出現阻塞并返回0,否則pthread_mutex_trylock就會失敗,不能鎖住互斥量,而返回EBUSY。

顧名思義就是加鎖某一個線程后,必須要等待此線程執行完后解鎖,其他的線程才能夠進行。在main函數里面加鎖后必須釋放鎖。

二、什么是死鎖

當兩個或兩個以上的線程在執行過程中,因為爭奪資源而造成的一種相互等待的狀態,由于存在一種環路的鎖依賴關系而永遠地等待下去,如果沒有外部干涉,他們將永遠等待下去,此時的這個狀態稱之為死鎖。

例:創建2個互斥鎖,進程1申請得到第一把鎖后,同時申請第二把鎖;進程2申請得到第二把鎖后,同時申請第一把鎖。

wKgZomX1nNKAdKL2AACM0l5_73w264.png查找字符串

三、線程條件控制實現線程的同步

例:

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

方法一:加互斥鎖

方法二:引入條件量

wKgaomX1nVWALoxdAAPoTCRSR9k220.png

首先在線程1里面調用pthread_cond_wait函數等待條件量的觸發,

wKgZomX1na6AbSa9AASqRlEBPDg613.png

在線程2中g_data達到3時,調用函數pthread_cond_signal()來觸發條件量,

四、使用宏來靜態初始化

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

動態初始化:

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

主函數中必須:

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

使用宏進行初始化(靜態初始化):

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


審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11345

    瀏覽量

    210392
  • 多線程編程
    +關注

    關注

    0

    文章

    17

    瀏覽量

    6708
收藏 人收藏

    評論

    相關推薦

    Linux多線程編程手冊

    Linux多線程編程手冊
    發表于 11-07 10:17

    Linux c多線程編程的4個實例

    Linux中最流行的線程機制為LinuxThreads,下面以一個多線程編程實例來介紹該線程庫的
    發表于 10-17 09:32

    Linux c多線程編程的4個實例分享

    Linux c多線程編程的4個實例  在主流的操作系統中,多任務一般都提供了進程和線程兩種實現方式,進程享有獨立的進程空間,而
    發表于 06-09 04:35

    嵌入式Linux多線程編程

    嵌入式Linux多線程編程-學習資源-華清遠見清遠見嵌入式學院:清遠見嵌入式學院:《嵌入式應用程序設計》——第5 章 嵌入式Linux 多線程
    發表于 11-05 06:54

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

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

    linux多線程編程課件

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

    linux多線程編程開發

    本文中我們針對 Linux多線程編程的主要特性總結出 5 條經驗,用以改善 Linux 多線程編程
    發表于 12-26 14:24 ?55次下載
    <b class='flag-5'>linux</b><b class='flag-5'>多線程</b><b class='flag-5'>編程</b>開發

    多線程編程Linux線程編程

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

    linux多線程編程技術

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

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

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

    什么是多線程編程?多線程編程基礎知識

    摘要:多線程編程是現代軟件技術中很重要的一個環節。要弄懂多線程,這就要牽涉到多進程。本文主要以多線程編程以及
    發表于 12-08 16:30 ?1.3w次閱讀

    關于Linux多線程編程技術學習總結

    Linux多線程編程技術 作為一個IT人員,不斷的學習和總結是我們這個職業習慣,所以我會將每個階段的學習都會通過一點的總結來記錄和檢測自己的學習效果,今天為大家總結了關于Linux
    發表于 04-22 03:12 ?2236次閱讀
    關于<b class='flag-5'>Linux</b>下<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>技術學習總結

    Linux下的多線程編程

    的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改?! ∠旅嫖覀兿葋韲L試編寫一個簡單的多線程程序。2 簡單的多線程編程  
    發表于 04-02 14:43 ?635次閱讀

    Linux多線程編程的知識點

    Hello、Hello大家好,我是木榮,今天我們繼續來聊一聊Linux多線程編程中的重要知識點,詳細談談多線程中同步和互斥機制。
    發表于 04-26 17:27 ?631次閱讀
    <b class='flag-5'>Linux</b>中<b class='flag-5'>多線程</b><b class='flag-5'>編程</b>的知識點

    mfc多線程編程實例

    (圖形用戶界面)應用程序的開發。在這篇文章中,我們將重點介紹MFC中的多線程編程。 多線程編程在軟件開發中非常重要,它可以實現程序的并發執行,提高程序的效率和響應速度。MFC提供了豐富
    的頭像 發表于 12-01 14:29 ?1569次閱讀
    主站蜘蛛池模板: 亚洲a级毛片 | 亚洲一区二区免费看 | 99视频精品全国免费 | 国产一区在线播放 | 一本到视频在线 | 丁香花在线视频 | 在线你懂的 | 你懂的在线视频网站 | 77788色淫免费网站视频 | 午夜片 飘香香影院 | 亚洲电影一区二区 | 美女黄色一级片 | 天天爱天天做天天爽天天躁 | 国产男靠女免费视频网站 | 亚洲视频一区网站 | 777欧美午夜精品影院 | 四虎现在的网址入口 | 国产毛片一区二区三区精品 | 久久亚洲国产成人影院 | 农村妇女色又黄一级毛片卡 | 天天狠狠弄夜夜狠狠躁·太爽了 | 美女视频黄又黄又免费高清 | 日韩三级中文字幕 | 国产真实野战在线视频 | 综合激情网五月 | 91久久青草精品38国产 | www.五月天| 热re99久久国产精品 | 日本拍拍视频 | 国产黄色在线观看 | 四虎a级欧美在线观看 | 午夜影剧院 | 男女透逼视频 | 午夜影视在线免费观看 | 精品三级在线 | 人人艹人人草 | 日本特黄特色大片免费播放视频 | 视频在线一区二区 | 三级视频网 | 一级特黄aaaaaa大片 | 在线天堂中文 |