999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談linux多線程協(xié)作

2017-03-09 15:48:21史歡歡周光森姚永哲
環(huán)球市場 2017年36期
關(guān)鍵詞:進程程序

史歡歡 周光森 姚永哲

沈陽中鈔信達金融設(shè)備有限公司

1、線程的創(chuàng)建和終止

1)在線程創(chuàng)建之前,需要初始化線程,設(shè)置線程的優(yōu)先級、是否繼承父進程優(yōu)先級、調(diào)度策略,并分配各個線程的優(yōu)先級。創(chuàng)建線程的函數(shù)是pthread_create()。

2)線程的終止的兩種方式:第一通過return從線程函數(shù)返回,第二種通過調(diào)用pthread_exit()函數(shù)使線程退出。此外,主線程中如果從main函數(shù)返回或是調(diào)用了exit函數(shù)退出主線程,則整個進程終止,此時所有的其他線程也將終止。另一種是,如果主線程調(diào)用pthread_exit函數(shù),則僅僅是主線程消亡,進程不會結(jié)束,其他線程也不會結(jié)束,直到所有的線程都結(jié)束時,進程才結(jié)束。

2、多線程協(xié)作

線程與線程之間通訊,互相交互變量,不能總用全局變量,這樣會出現(xiàn)A線程正在改全局變量的值,B線程卻在讀全局變量的值,因為各線程是并行工作,所以需要加互斥鎖、條件變量或消息隊列來同步。

1)互斥鎖pthread_mutex_lock(unlock或trylock):用來防止兩個進程或線程在同一時刻訪問相同的共享資源。如果互斥量已經(jīng)上鎖,調(diào)用線程會阻塞,直到互斥量被解鎖。比如A和B兩個線程都要用a變量,在A線程中,加鎖之后改變a變量的值,然后解鎖,而在B線程中,加鎖之后讀a變量的值,然后解鎖,加鎖和解鎖必須判斷是否成功,否則對a變量的讀寫會出錯,最好用pthread_mutex_trylock加鎖,如果加鎖失敗,會返回EBUSY,成功則返回0,返回EBUSY說明另一線程對這個變量加鎖后還未解鎖。此外,阻塞和非阻塞的意思是,阻塞是一直加鎖直到成功,非阻塞是加鎖完畢后不管成功與否都返回。

2)條件變量cond

條件變量的基本操作是當觸發(fā)條件(當條件變?yōu)檎鏁r),等待條件,掛起線程直到其他線程觸發(fā)條件。即A線程先進入wait等待,讓其掛起,等待B線程執(zhí)行激活后,A線程繼續(xù)執(zhí)行。為了防止競爭,條件變量總是和一個互斥鎖結(jié)合在一起。pthread_cond_wait一般嵌套在while(條件)中,條件第一次滿足就可以。激活等待線程是激發(fā)條件有兩種形式,pthread_cond_signal( )激活一個等待該條件的線程,存在多個等待線程時按入隊順序激活其中一個;而pthread_cond_broadcast()則激活所有等待線程。

3)消息隊列:在A線程中改變某個變量后,發(fā)消息給B線程,B線程在沒有得到消息時處于掛起狀態(tài),除非A線程給B線程發(fā)消息,B線程接收到消息才開始執(zhí)行msgrcv的下一行代碼。msgsnd向隊列末端添加一條新消息;msgrcv從隊列中取消息,取消息是不一定遵循先進先出的,也可以按消息的類型字段取消息;

4)線程之間是異步的,無法確定哪個線程先執(zhí)行。如果在同一優(yōu)先級中有N個線程,需要使用sleep來調(diào)整各個線程執(zhí)行的順序。

5)Linux下多個線程同時對一個文件進行寫操作,需要使用文件鎖解決沖突,使用int flock(int fd,int operation)(鎖定文件或解除鎖定)函數(shù)。flock()會依參數(shù)operation所指定的方式對參數(shù)fd所指的文件做各種鎖定或解除鎖定的動作。此函數(shù)只能鎖定整個文件,無法鎖定文件的某一區(qū)域。LOCK_EX 建立互斥鎖定,一個文件同時只有一個互斥鎖定。LOCK_NB 無法建立鎖定時,此操作可不被阻斷,馬上返回進程。通常與LOCK_EX 做OR(|)組合。

if(flock(fileno(文件指針),LOCK_EX | LOCK_NB)== FAILURE)//文件加鎖

if(flock(fileno(文件指針),LOCK_UN)== FAILURE)//釋放文件鎖

3、線程內(nèi)部處理

1)線程中程序不運行的三種狀態(tài)睡眠sleep()、阻塞、掛起,他們的區(qū)別是:

①掛起:沒有滿足的運行條件,正在待命,比如msgrcv,沒有接收到消息時就掛起,讓別的線程執(zhí)行,自己等待msgsnd,一旦接收到消息,繼續(xù)執(zhí)行;

②sleep( ):歇一會,讓別的線程先運行;

③阻塞:線程由于等待處理器外的其他條件無法運行,如條件變量的改變、加鎖互斥量或I/O操作結(jié)束。

2)單線程進入死循環(huán)

如果線程中所有程序的執(zhí)行需要滿足if條件,但if條件一直不滿足,這個線程將處于死循環(huán),使別的線程也無法執(zhí)行。可以在if之后加入else,里面是sleep(),在執(zhí)行sleep()期間,別的線程就可以運行。

3)線程定時執(zhí)行

如果想讓在線程定時執(zhí)行某個函數(shù),需要用到setitimer()有兩個功能,一是指定一段時間后,才執(zhí)行某個function,二是每間隔一段時間就執(zhí)行某個function。如果要實現(xiàn)間隔執(zhí)行,程序中一定要加pause( )函數(shù),并且嵌套在while(1)中。

結(jié)束語:

在應(yīng)用軟件中編寫各個線程的程序。調(diào)用linux中的系統(tǒng)函數(shù)一定要接收返回值來判斷是否執(zhí)行成功。linux程序不能實時仿真,調(diào)試程序只能通過printf打印變量值到串口。所以在寫linux程序,一定要防止內(nèi)存泄漏,比如數(shù)組、變量類型、指針一定要推敲使用。遇到內(nèi)存泄漏,用printf來打印定位。

猜你喜歡
進程程序
債券市場對外開放的進程與展望
中國外匯(2019年20期)2019-11-25 09:54:58
試論我國未決羈押程序的立法完善
失能的信仰——走向衰亡的民事訴訟程序
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
創(chuàng)衛(wèi)暗訪程序有待改進
恐怖犯罪刑事訴訟程序的完善
我國高等教育改革進程與反思
Linux僵死進程的產(chǎn)生與避免
男女平等進程中出現(xiàn)的新矛盾和新問題
主站蜘蛛池模板: 免费jjzz在在线播放国产| 91精品aⅴ无码中文字字幕蜜桃| 亚洲侵犯无码网址在线观看| 青青网在线国产| 狠狠色综合网| 亚洲精品欧美日本中文字幕| 亚洲精品视频网| 久久国产拍爱| 欧美精品v| 亚洲成A人V欧美综合| 小说区 亚洲 自拍 另类| 欧美成人免费一区在线播放| h网址在线观看| 欧美伦理一区| 婷婷六月综合| 999精品免费视频| 久久久久人妻精品一区三寸蜜桃| 免费无遮挡AV| 亚洲精品成人7777在线观看| 国产精品刺激对白在线| 9啪在线视频| 精品久久久久久久久久久| 色综合天天视频在线观看| 国产成人91精品免费网址在线| 亚洲欧美日韩久久精品| 在线视频97| 日a本亚洲中文在线观看| 亚洲国产日韩欧美在线| 国产精品网拍在线| 国产成人免费手机在线观看视频| 国产XXXX做受性欧美88| 亚洲av片在线免费观看| a毛片免费看| 久草视频一区| 国产在线视频自拍| 日本午夜影院| 五月婷婷中文字幕| 91国内在线视频| 日本道综合一本久久久88| 91精品福利自产拍在线观看| 女人一级毛片| 美女无遮挡被啪啪到高潮免费| 黄色网站在线观看无码| 秋霞午夜国产精品成人片| 无码啪啪精品天堂浪潮av| 亚洲av成人无码网站在线观看| 国产精品太粉嫩高中在线观看 | 亚洲丝袜第一页| 欧美日韩在线观看一区二区三区| 亚洲天堂在线免费| 亚洲爱婷婷色69堂| 免费无码一区二区| 99在线观看免费视频| 国产成人91精品免费网址在线| 18禁影院亚洲专区| 亚洲人成网站观看在线观看| 日本亚洲成高清一区二区三区| 亚洲成a人在线播放www| 青青草一区二区免费精品| 91成人免费观看| 三上悠亚一区二区| 欧美五月婷婷| 青青青伊人色综合久久| 伊人色综合久久天天| 亚洲一区二区三区在线视频| 亚洲天堂成人| 精品国产成人三级在线观看| 伊人久久大线影院首页| 一级毛片中文字幕| 国产剧情伊人| 国产精品视频猛进猛出| 综合色在线| 无码高潮喷水专区久久| 五月丁香伊人啪啪手机免费观看| 欧美视频二区| 国产精品污污在线观看网站| 99视频精品全国免费品| 久久久久亚洲精品无码网站| 欧美激情伊人| 午夜不卡视频| 在线日韩日本国产亚洲| 久久网欧美|