Linux和C語言的學習方法你真的知道嗎?
時(shi)間:2022-05-26 來源:華清遠見
自開(kai)班(ban)以來已經(jing)近兩(liang)個月了,不能(neng)說所教知識(shi)(shi)都掌握得(de)非常好,但至少還(huan)是能(neng)跟著老師(shi)步伐、理解關鍵知識(shi)(shi)點、正(zheng)確完成作業(ye)的(de)(de)。現(xian)在還(huan)沒真正(zheng)開(kai)始進入硬件方面(mian)的(de)(de)學習,但我相信對(dui)基本理論知識(shi)(shi)及(ji)編(bian)程(cheng)開(kai)發的(de)(de)牢固掌握是后續(xu)深(shen)入學習的(de)(de)前(qian)提。因(yin)此,趁著現(xian)在正(zheng)處與學習進度(du)的(de)(de)轉折(zhe)點,有必要(yao)對(dui)先(xian)前(qian)的(de)(de)知識(shi)(shi)作一下概括性總結。
★Linux的使(shi)用
開(kai)班的(de)(de)(de)第一天,老師就(jiu)(jiu)給我們講了為什么(me)要(yao)先學c、學linux:因為嵌入式的(de)(de)(de)根本就(jiu)(jiu)是軟(ruan)件(jian)驅動硬(ying)件(jian),而C語(yu)言是最接近硬(ying)件(jian)的(de)(de)(de)語(yu)言、有指(zhi)針的(de)(de)(de)概念、可(ke)以直接操作硬(ying)件(jian),另(ling)外,功能復雜的(de)(de)(de)硬(ying)件(jian)是含有操作系統的(de)(de)(de),這就(jiu)(jiu)需要(yao)我們選擇(ze)使用廣泛而開(kai)源(yuan)的(de)(de)(de)linux來學習。
◇Shell 命令
shell是一個命令行解釋器,命令行格式為:命令名稱(cheng)、選項、參數,常用的(de)命令有:cd進(jin)入目(mu)錄(lu);ls顯(xian)示目(mu)錄(lu)下(xia)的(de)文(wen)件(jian)(jian);touch、mkdir創建(jian)文(wen)件(jian)(jian)、文(wen)件(jian)(jian)夾(jia)(jia);mv、cp、rm移(yi)動、復(fu)制(zhi)、刪除文(wen)件(jian)(jian)和文(wen)件(jian)(jian)夾(jia)(jia);zip、gzip、tar壓(ya)縮和解壓(ya)文(wen)件(jian)(jian);ln創建(jian)軟(ruan)硬(ying)鏈接文(wen)件(jian)(jian)。
◇文件管理、用戶(hu)管理
Linux是一個多(duo)(duo)用(yong)(yong)戶(hu)(hu)(hu)系統(tong),它可以(yi)用(yong)(yong)adduser來創建(jian)多(duo)(duo)個用(yong)(yong)戶(hu)(hu)(hu),并用(yong)(yong)su來進行(xing)不同用(yong)(yong)戶(hu)(hu)(hu)及用(yong)(yong)戶(hu)(hu)(hu)與管理員(yuan)之間的切換;另外,與目錄結構(gou)(gou)屬于分區的windows不同,在Linux的文件系統(tong)中,分區屬于目錄結構(gou)(gou)。
◇軟件管理
ubuntu上的(de)軟件包管理(li)工具apt可以通(tong)過(guo)網絡(luo)很方便(bian)地完成(cheng)軟件包的(de)獲取、安(an)裝、卸載、查詢等操作(zuo)。比如,當(dang)我們在使用putty前需要安(an)裝SSH的(de)時候,就可以通(tong)過(guo)命(ming)令:sudo apt-get update、sudo apt-get install SSH 來安(an)裝。
◇VI 編輯器,GCC 編譯器
Vi是Linux系統中常用的(de)一(yi)個(ge)文(wen)(wen)本(ben)(ben)編(bian)輯(ji)(ji)(ji)器(qi),通(tong)過vi加上文(wen)(wen)件(jian)(jian)(jian)名可(ke)以(yi)對文(wen)(wen)件(jian)(jian)(jian)創(chuang)建或編(bian)輯(ji)(ji)(ji)。三(san)種模(mo)式(shi)(shi)中:命令模(mo)式(shi)(shi)是我們進(jin)(jin)入(ru)編(bian)輯(ji)(ji)(ji)器(qi)的(de)第一(yi)模(mo)式(shi)(shi),可(ke)以(yi)對文(wen)(wen)本(ben)(ben)進(jin)(jin)行(xing)剪切復(fu)制替換刪(shan)除操(cao)作;輸入(ru)模(mo)式(shi)(shi)可(ke)以(yi)是對文(wen)(wen)件(jian)(jian)(jian)進(jin)(jin)行(xing)常規編(bian)輯(ji)(ji)(ji);底行(xing)模(mo)式(shi)(shi)可(ke)以(yi)保存文(wen)(wen)本(ben)(ben)并退出。vi編(bian)輯(ji)(ji)(ji)好的(de)c文(wen)(wen)件(jian)(jian)(jian)需要被編(bian)譯二進(jin)(jin)制文(wen)(wen)件(jian)(jian)(jian)才(cai)可(ke)以(yi)被機器(qi)識別(bie)運(yun)行(xing),而(er)GCC 編(bian)譯器(qi)就承載著這樣(yang)的(de)功能,它通(tong)過預處理、編(bian)譯、匯編(bian)、鏈(lian)接四個(ge)步驟完成該操(cao)作。
★C語言編程
C語言學(xue)習的(de)開始(shi)就是掌握基本的(de)語法規則,主要(yao)包(bao)括(kuo)各種基本類(lei)型常量變量、運(yun)算(suan)符、控制流、函數的(de)使(shi)用(yong)。這部分總的(de)來(lai)說沒(mei)有什么難度,但(dan)(dan)有一些(xie)容易忽略的(de)細節(jie)需要(yao)留意,如同(tong)為單目運(yun)算(suan)的(de)*解引用(yong)和(he)++操作同(tong)時(shi)使(shi)用(yong)時(shi)哪個優(you)先運(yun)算(suan);數組被定(ding)義(yi)后其空(kong)間(jian)大小(xiao)和(he)首(shou)地址不(bu)允許(xu)改變;要(yao)用(yong)strcmp()判(pan)斷字符串相等而(er)不(bu)能(neng)直(zhi)接用(yong)==;指(zhi)針(zhen)定(ding)義(yi)后但(dan)(dan)沒(mei)初始(shi)化會變成野指(zhi)針(zhen),后續使(shi)用(yong)可能(neng)發生段錯(cuo)誤(wu);使(shi)用(yong)較大的(de)數據時(shi)應在堆中開辟空(kong)間(jian)存(cun)放以防棧溢出(chu)。
☆數據結構
數(shu)據(ju)(ju)結(jie)構(gou)就是(shi)對(dui)數(shu)據(ju)(ju)進(jin)行人為(wei)的(de)(de)格式(shi)化規范化儲存,使得數(shu)據(ju)(ju)能(neng)夠快(kuai)捷地增刪(shan)查改,不同的(de)(de)數(shu)據(ju)(ju)結(jie)構(gou)有不同的(de)(de)優缺(que)點及主要用(yong)途,如(ru)順(shun)序表(biao)(biao)(biao)(biao)查找(zhao)快(kuai)增刪(shan)慢而鏈(lian)(lian)表(biao)(biao)(biao)(biao)查找(zhao)滿增刪(shan)快(kuai)。鑒于內核(he)(he)鏈(lian)(lian)表(biao)(biao)(biao)(biao)的(de)(de)重(zhong)要性及以后使用(yong)的(de)(de)廣(guang)泛性,在(zai)此只做內核(he)(he)鏈(lian)(lian)表(biao)(biao)(biao)(biao)的(de)(de)總結(jie)。內核(he)(he)鏈(lian)(lian)表(biao)(biao)(biao)(biao)和雙(shuang)向循環鏈(lian)(lian)表(biao)(biao)(biao)(biao)類似(si),與之(zhi)不同的(de)(de)是(shi),內核(he)(he)鏈(lian)(lian)表(biao)(biao)(biao)(biao)將數(shu)據(ju)(ju)和鏈(lian)(lian)表(biao)(biao)(biao)(biao)剝離開,并提(ti)供了(le)很多的(de)(de)宏(hong)和封(feng)裝(zhuang)函數(shu)。其(qi)中非常重(zhong)要的(de)(de)是(shi)list_for_each()、list_entry(),它們分別實(shi)現(xian)了(le)對(dui)小結(jie)構(gou)體(ti)(ti)(循環鏈(lian)(lian)表(biao)(biao)(biao)(biao))的(de)(de)遍歷操作、通(tong)過小結(jie)構(gou)體(ti)(ti)的(de)(de)地址反推(tui)找(zhao)到大結(jie)構(gou)體(ti)(ti)的(de)(de)地址,從而通(tong)過大結(jie)構(gou)體(ti)(ti)得到其(qi)下的(de)(de)數(shu)據(ju)(ju)域。另外還有list_add()、list_del_init()封(feng)裝(zhuang)實(shi)現(xian)了(le)對(dui)大結(jie)構(gou)體(ti)(ti)節點的(de)(de)插(cha)入、孤立(li)刪(shan)除(chu),不然自(zi)己搭建雙(shuang)向循環鏈(lian)(lian)表(biao)(biao)(biao)(biao)的(de)(de)話,就需在(zai)頭插(cha)node節點時要寫上經典的(de)(de)四句指(zhi)針域重(zhong)連接指(zhi)令:①node->next = head->next;②head->next->pre = node;③node->pre = head;④head->next = node;
☆文件IO
這(zhe)里(li)的(de)(de)(de)(de)(de)iO指的(de)(de)(de)(de)(de)是(shi)內存和磁盤間的(de)(de)(de)(de)(de)文(wen)(wen)(wen)件(jian)交互,由于linux“一(yi)(yi)切皆(jie)文(wen)(wen)(wen)件(jian)的(de)(de)(de)(de)(de)”的(de)(de)(de)(de)(de)特性,其7種類(lei)型的(de)(de)(de)(de)(de)文(wen)(wen)(wen)件(jian)都是(shi)可以被輸入(ru)輸出的(de)(de)(de)(de)(de)。其間我們重點(dian)學習(xi)了(le)(le)(le)文(wen)(wen)(wen)件(jian)IO和標準(zhun)(zhun)(zhun)IO,他(ta)們的(de)(de)(de)(de)(de)主(zhu)要區別就(jiu)是(shi)前(qian)者直(zhi)接調用(yong)(yong)系統函數沒有(you)(you)緩沖區,而(er)(er)后者調用(yong)(yong)的(de)(de)(de)(de)(de)是(shi)封裝好的(de)(de)(de)(de)(de)庫(ku)函數有(you)(you)緩沖區。一(yi)(yi)般來(lai)(lai)說,文(wen)(wen)(wen)件(jian)IO是(shi)專門給文(wen)(wen)(wen)件(jian)使用(yong)(yong)的(de)(de)(de)(de)(de),而(er)(er)標準(zhun)(zhun)(zhun)IO是(shi)專門給設備(bei)使用(yong)(yong)的(de)(de)(de)(de)(de)。文(wen)(wen)(wen)件(jian)、標準(zhun)(zhun)(zhun)io的(de)(de)(de)(de)(de)打開和關閉(bi)所用(yong)(yong)的(de)(de)(de)(de)(de)函數是(shi)相似(si)的(de)(de)(de)(de)(de),只(zhi)是(shi)一(yi)(yi)個有(you)(you)f一(yi)(yi)個沒f;但他(ta)們的(de)(de)(de)(de)(de)讀寫(xie)(xie)函數差別就(jiu)比較大了(le)(le)(le),文(wen)(wen)(wen)件(jian)io用(yong)(yong)的(de)(de)(de)(de)(de)是(shi)read()、write(),而(er)(er)標準(zhun)(zhun)(zhun)IO根(gen)(gen)據輸入(ru)輸出是(shi)否格式(shi)化(hua)分為(wei)printf、put、scanf、get,具體還會根(gen)(gen)據一(yi)(yi)字一(yi)(yi)行(xing)一(yi)(yi)塊地讀寫(xie)(xie)及讀寫(xie)(xie)目(mu)標地的(de)(de)(de)(de)(de)不同(tong)而(er)(er)有(you)(you)所不同(tong)。另外(wai)還了(le)(le)(le)解(jie)了(le)(le)(le)下(xia)利用(yong)(yong)time()、ctime()來(lai)(lai)獲取(qu)標準(zhun)(zhun)(zhun)時(shi)間并轉化(hua)為(wei)可閱讀化(hua)時(shi)間的(de)(de)(de)(de)(de)時(shi)間編程,以及通過(guo)lstat()、opendir()、readdir()來(lai)(lai)查看(kan)目(mu)錄(lu)下(xia)的(de)(de)(de)(de)(de)文(wen)(wen)(wen)件(jian)屬性。最后介紹了(le)(le)(le)動靜態庫(ku)的(de)(de)(de)(de)(de)概念及制(zhi)作,前(qian)者在文(wen)(wen)(wen)件(jian)運行(xing)時(shi)才加載(zai)到可執行(xing)文(wen)(wen)(wen)件(jian)中,而(er)(er)后者在編譯時(shi)即完(wan)成,至于二者制(zhi)作步驟的(de)(de)(de)(de)(de)話比較復雜,需要用(yong)(yong)到的(de)(de)(de)(de)(de)時(shi)候(hou)再(zai)對照著筆(bi)記制(zhi)作好了(le)(le)(le)。
☆進程線程
這部(bu)分我想是(shi)(shi)重中(zhong)之(zhi)重,畢竟進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)線程(cheng)(cheng)(cheng)出現(xian)(xian)的(de)(de)(de)(de)(de)(de)(de)一大動機就(jiu)(jiu)(jiu)跟人類的(de)(de)(de)(de)(de)(de)(de)無限欲望相關聯:想要在(zai)(zai)越短的(de)(de)(de)(de)(de)(de)(de)時(shi)(shi)間(jian)(jian)做(zuo)(zuo)越多(duo)(duo)(duo)的(de)(de)(de)(de)(de)(de)(de)事情。進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)就(jiu)(jiu)(jiu)是(shi)(shi)執行(xing)(xing)中(zhong)的(de)(de)(de)(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu),但(dan)與只包(bao)含指令(ling)和數據(ju)的(de)(de)(de)(de)(de)(de)(de)程(cheng)(cheng)(cheng)序(xu)不(bu)同,進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)有(you)屬于(yu)(yu)自(zi)己的(de)(de)(de)(de)(de)(de)(de)地址空間(jian)(jian),里面不(bu)僅含有(you)指令(ling)段數據(ju)段,還(huan)有(you)動態(tai)(tai)的(de)(de)(de)(de)(de)(de)(de)堆棧段,因此(ci)多(duo)(duo)(duo)個(ge)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)可(ke)(ke)(ke)以實現(xian)(xian)了同一時(shi)(shi)間(jian)(jian)做(zuo)(zuo)多(duo)(duo)(duo)個(ge)任(ren)務。進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)通過(guo)fork()函數創建(jian),對應的(de)(de)(de)(de)(de)(de)(de)PCB由內核(he)創建(jian)并(bing)保(bao)存在(zai)(zai)內核(he)空間(jian)(jian)。盡管多(duo)(duo)(duo)核(he)芯片的(de)(de)(de)(de)(de)(de)(de)出現(xian)(xian)可(ke)(ke)(ke)以讓多(duo)(duo)(duo)個(ge)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)真的(de)(de)(de)(de)(de)(de)(de)在(zai)(zai)同時(shi)(shi)執行(xing)(xing)任(ren)務,但(dan)不(bu)是(shi)(shi)所有(you)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)都(dou)同時(shi)(shi)處(chu)于(yu)(yu)運(yun)行(xing)(xing)狀(zhuang)態(tai)(tai)的(de)(de)(de)(de)(de)(de)(de),更多(duo)(duo)(duo)的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)是(shi)(shi)在(zai)(zai)極小的(de)(de)(de)(de)(de)(de)(de)時(shi)(shi)間(jian)(jian)片段下輪流替換著來工作,至于(yu)(yu)替換的(de)(de)(de)(de)(de)(de)(de)順序(xu)是(shi)(shi)由cpu調度機制決定(ding)的(de)(de)(de)(de)(de)(de)(de),我們無法確定(ding),這也是(shi)(shi)為什么進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)擁有(you)異步特性的(de)(de)(de)(de)(de)(de)(de)原(yuan)因。未在(zai)(zai)運(yun)行(xing)(xing)狀(zhuang)態(tai)(tai)的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)往往處(chu)于(yu)(yu)隊列(lie)就(jiu)(jiu)(jiu)緒(xu)等待狀(zhuang)態(tai)(tai)或(huo)休眠狀(zhuang)態(tai)(tai),其(qi)它(ta)(ta)具(ju)體的(de)(de)(de)(de)(de)(de)(de)狀(zhuang)態(tai)(tai)可(ke)(ke)(ke)以通過(guo)命令(ling)ps -aux查看。此(ci)外,運(yun)行(xing)(xing)中(zhong)的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)還(huan)分為前臺運(yun)行(xing)(xing)和后(hou)(hou)臺運(yun)行(xing)(xing),如果進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)是(shi)(shi)后(hou)(hou)臺運(yun)行(xing)(xing)的(de)(de)(de)(de)(de)(de)(de)話,就(jiu)(jiu)(jiu)不(bu)能(neng)對它(ta)(ta)進(jin)(jin)(jin)(jin)(jin)行(xing)(xing)前臺操(cao)作,如不(bu)能(neng)對它(ta)(ta)ctrl + c暫停(ting),這時(shi)(shi)候(hou)可(ke)(ke)(ke)以通過(guo)fg指令(ling)把它(ta)(ta)轉變為前臺運(yun)行(xing)(xing)或(huo)直接用(yong)kill指令(ling)終(zhong)止(zhi)(zhi)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)。被創建(jian)后(hou)(hou)的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)是(shi)(shi)有(you)生命周期的(de)(de)(de)(de)(de)(de)(de),它(ta)(ta)不(bu)但(dan)可(ke)(ke)(ke)以exit()自(zi)行(xing)(xing)終(zhong)止(zhi)(zhi)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng),還(huan)可(ke)(ke)(ke)以用(yong)exec函數族中(zhong)途改為執行(xing)(xing)新的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng),殊途同歸,進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)最后(hou)(hou)都(dou)是(shi)(shi)要終(zhong)止(zhi)(zhi)的(de)(de)(de)(de)(de)(de)(de),終(zhong)止(zhi)(zhi)后(hou)(hou)的(de)(de)(de)(de)(de)(de)(de)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)的(de)(de)(de)(de)(de)(de)(de)PCB需要被其(qi)父(fu)進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)wait()回收,中(zhong)間(jian)(jian)有(you)差錯的(de)(de)(de)(de)(de)(de)(de)話就(jiu)(jiu)(jiu)可(ke)(ke)(ke)能(neng)導(dao)致(zhi)孤(gu)兒進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)或(huo)僵(jiang)尸進(jin)(jin)(jin)(jin)(jin)程(cheng)(cheng)(cheng)的(de)(de)(de)(de)(de)(de)(de)出現(xian)(xian)。
當(dang)需要進(jin)程不受(shou)干擾地(di)一(yi)直(zhi)在后臺(tai)運行、周期性地(di)等待或者執行某一(yi)個任(ren)務的時候(hou),可以將它設置為(wei)守護進(jin)程。守護進(jin)程不與任(ren)何終端關聯(lian),即(ji)使終端關閉了也(ye)還是會照常運行,老師教的7步(bu)創建法得記熟。值得注意的是,因為(wei)守護進(jin)程無法往(wang)標準輸出(chu)打印(yin),中間出(chu)錯了也(ye)沒人知道,所(suo)以得找個地(di)方儲(chu)存它的運行情況(kuang),因此系統(tong)日志應運而生。系統(tong)日志可以通過命(ming)令cat /var/log/syslog查看。
進(jin)程可(ke)以通過無名管(guan)道(dao)、有名管(guan)道(dao)、信(xin)號、共享內(nei)存、消息隊(dui)列(lie)、信(xin)號量來(lai)進(jin)行進(jin)程間通信(xin),這(zhe)些(xie)通信(xin)方式都是在內(nei)核中得以實(shi)現的。具(ju)體的函數(shu)及使用筆記上都有詳細記錄,就(jiu)不再(zai)贅述了。值得留意的是無名有名管(guan)道(dao)、消息隊(dui)列(lie)中的同(tong)一數(shu)據(ju)是讀(du)了一次就(jiu)沒有了的,而共享內(nei)存中的同(tong)一數(shu)據(ju)可(ke)以被(bei)多次讀(du)取。
進程(cheng)(cheng)和線(xian)(xian)程(cheng)(cheng)都(dou)是(shi)為了實現(xian)計算機的(de)(de)(de)并發功能,但(dan)是(shi)進程(cheng)(cheng)的(de)(de)(de)創建消(xiao)(xiao)亡,及進程(cheng)(cheng)間(jian)的(de)(de)(de)切(qie)(qie)換(huan)(huan)都(dou)很(hen)耗費資(zi)源(yuan),每次(ci)切(qie)(qie)換(huan)(huan)進程(cheng)(cheng)都(dou)要進程(cheng)(cheng)上下文切(qie)(qie)換(huan)(huan)。線(xian)(xian)程(cheng)(cheng)的(de)(de)(de)優勢是(shi)多(duo)個(ge)(ge)線(xian)(xian)程(cheng)(cheng)共享指令和全局變量(liang),這就(jiu)減少了資(zi)源(yuan)管(guan)理的(de)(de)(de)消(xiao)(xiao)耗,從(cong)而更專注于任務的(de)(de)(de)執行(xing)。但(dan)有(you)優點就(jiu)有(you)缺點,資(zi)源(yuan)的(de)(de)(de)共享可能會致(zhi)(zhi)使(shi)多(duo)個(ge)(ge)線(xian)(xian)程(cheng)(cheng)同時對臨(lin)界(jie)資(zi)源(yuan)進行(xing)操作(zuo),從(cong)而導(dao)致(zhi)(zhi)運算結果的(de)(de)(de)不(bu)準確。為了解決這一(yi)問題,出現(xian)了線(xian)(xian)程(cheng)(cheng)的(de)(de)(de)互(hu)(hu)斥與(yu)同步。線(xian)(xian)程(cheng)(cheng)互(hu)(hu)斥利用(yong)mutex鎖(suo)在臨(lin)界(jie)區(qu)的(de)(de)(de)前后分別pthread_mutex_lock()上鎖(suo)和pthread_mutex_destroy()解鎖(suo),實現(xian)同一(yi)時間(jian)只允許一(yi)個(ge)(ge)線(xian)(xian)程(cheng)(cheng)操作(zuo)臨(lin)界(jie)資(zi)源(yuan)。線(xian)(xian)程(cheng)(cheng)的(de)(de)(de)同步用(yong)的(de)(de)(de)是(shi)信號量(liang),相當(dang)于加上了數量(liang)的(de)(de)(de)線(xian)(xian)程(cheng)(cheng)的(de)(de)(de)互(hu)(hu)斥,通過合(he)理地使(shi)用(yong)p+1、v-1操作(zuo)使(shi)得多(duo)個(ge)(ge)線(xian)(xian)程(cheng)(cheng)按一(yi)定(ding)次(ci)序運行(xing)。
以上即(ji)為近兩(liang)個月來重(zhong)要知(zhi)識的(de)概括(kuo)性總結。

