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)的新矛盾和新問題
主站蜘蛛池模板: 精品三级网站| 日韩成人在线视频| 日本精品影院| 亚洲人精品亚洲人成在线| 久久久噜噜噜久久中文字幕色伊伊| 亚洲综合色婷婷中文字幕| 亚洲国产成人无码AV在线影院L| 欧美成人区| 在线免费看片a| 国产精品成人免费视频99| 99久久精品国产综合婷婷| 日本福利视频网站| 欧美精品v| 波多野结衣的av一区二区三区| 国产精品美女自慰喷水| 亚洲系列中文字幕一区二区| 国产乱肥老妇精品视频| 亚洲人成在线精品| 丝袜高跟美脚国产1区| 国产精品美女在线| 亚洲男人的天堂在线观看| 日本成人福利视频| 国产91高跟丝袜| 亚洲国产成人精品无码区性色| 乱色熟女综合一区二区| 久久综合一个色综合网| 亚洲六月丁香六月婷婷蜜芽| 国产理论最新国产精品视频| 免费Aⅴ片在线观看蜜芽Tⅴ| 精品国产网站| 欧美激情一区二区三区成人| 亚洲色婷婷一区二区| 拍国产真实乱人偷精品| 亚洲一区国色天香| 国内老司机精品视频在线播出| 免费人成黄页在线观看国产| 亚洲色图欧美一区| 欧美成人精品高清在线下载| 黄色网址免费在线| 2020精品极品国产色在线观看| 日本a级免费| 69国产精品视频免费| 国模视频一区二区| 国产av一码二码三码无码| 高清视频一区| 99热亚洲精品6码| 成人国产小视频| 在线国产资源| 欧美在线一级片| 免费不卡视频| 国产毛片高清一级国语| 午夜福利在线观看成人| 欧美一级高清免费a| 亚洲国产天堂久久综合226114| 制服丝袜国产精品| 日韩在线视频网| 精品成人免费自拍视频| 亚洲欧美另类中文字幕| m男亚洲一区中文字幕| 亚洲欧美日韩动漫| 日韩麻豆小视频| 一本久道久久综合多人| 中文字幕久久波多野结衣 | 2020久久国产综合精品swag| аv天堂最新中文在线| 国产精品无码AV片在线观看播放| 亚洲va视频| 美女一级毛片无遮挡内谢| 亚洲成a人片77777在线播放| 99re在线免费视频| 精久久久久无码区中文字幕| 91久久夜色精品国产网站 | 久久人搡人人玩人妻精品一| 野花国产精品入口| av一区二区无码在线| 波多野结衣一区二区三视频| 日本在线视频免费| 91免费精品国偷自产在线在线| 福利在线不卡| 国产一区二区三区在线观看免费| 72种姿势欧美久久久大黄蕉| 91黄视频在线观看|