色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 關于線程間通信

關于線程間通信 時間:2018-09-21      來源:未知

多進程和多線程是系統執行多任務機制的重要手段,多任務同時進行自然少不了相互之間的通信工作。下面先將線程間的通信方式總結一下,便于大家對比學習。

首先來說線程間的通信。因為多個線程是共享進程的空間的,所以線程之間的通信比較簡單,主要是利用全局變量的方法。全局變量對進程內的的所有線程都是可見的,所以多個線程可以通過操作全局變量達到相互通信的效果。但是這也存在一個問題,就是“資源”的競爭。

這里所說的資源指的就是全局變量,正是因為這種競爭(因為多線程是同時運行的,而我們往往不會去控制線程運行的順序,不然也不會用多線程了),導致可一些我們不愿見到的結果,所以我們每個線程對全局變量的操作都希望是原子性的。

為了解決這個問題在線程見引入了三種同步互斥機制,分別是信號量,互斥鎖,條件變量。

具體的函數應用如下:

信號量

#include

int sem_init(sem_t *sem, int pshared, unsigned int value);

功能:信號量的初始化。

參數:

sem:就是信號量的標識符

pshared: 0, 表示該信號量用于線程之間的通信。

非0, 表示該信號量用于進程程之間的通信。

value:非負的整數,就是信號量的初值。

如果為0, 表示沒有資源。

int sem_wait(sem_t *sem);

功能:阻塞申請信號量資源, 當信號量的值等于0時,睡眠等待。

一旦申請成功,那么信號量的值就會被減1.

參數:sem:

int sem_trywait(sem_t *sem);

功能:非阻塞申請信號量資源,如果申請不到資源,那么該函數立刻返回。

int sem_post(sem_t *sem);

功能:釋放信號量資源

釋放成功,信號量的值加1.

int sem_getvalue(sem_t *sem, int *svalue);

功能:獲得當前信號量的值。

參數: sem, 指定要獲得的信號量

svalue, 用于保存獲得的信號量的值。

int sem_destroy(sem_t *sem);

功能:銷毀無名信號量。

線程互斥鎖

int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

功能:產生一把鎖

參數:mutex: 線程鎖的標識符

attr: 設置線程鎖的屬性,通常為NULL。

pthread_mutex_t lock;

pthread_mutex_init(&lock, NULL);

int pthread_mutex_lock(pthread_mutex_t *mutex);

功能:上鎖, 阻塞等待,直到能夠得到這把鎖。

int pthread_mutex_unlock(pthread_mutex_t *mutex);

功能:解鎖。

int pthread_mutex_destroy(pthread_mutex_t *mutex);

功能:就是銷毀一把鎖。

條件變量:

int pthread_cond_init(pthread_cond_t *restrict cond, const pthread_condattr_t *restrict attr);

功能:初始化條件變量。

參數: cond: 條件變量的標識符

atrr:條件變量的屬性,通常為NULL。

pthread_cond_t cond;

pthread_cond_init(&cond, NULL);

int pthread_cond_signal(pthread_cond_t *cond);

功能:就是給一個需要該條件變量的線程發送喚醒的信號。

int pthread_cond_broadcast(pthread_cond_t *cond);

功能:給所有需要該條件變量的線程都發送喚醒信號。

int pthread_cond_wait(pthread_cond_t *restrict cond, pthread_mutex_t *restrict mutex);

功能:就是導致線程睡眠在此函數上,直到有線程給它發送條件變量的喚醒信號。

參數:cond :需要改條件變量

mutex:就是一個鎖。

pthread_cond_wait():先將鎖解開,然后進入睡眠,當被喚醒的時候需要重新加鎖(如果此時得不到鎖,那么繼續睡眠)。

int pthread_cond_destroy(pthread_cond_t *cond);

功能:銷毀條件變量。

這些函數的具體用法在上課時候我們已經學過,不再做更為具體的介紹,希望同學們多加練習。這里主要是總結下三者的應用。

這三種機制中,信號量和條件變量屬于一種阻塞通知的機制。采用阻塞的方法,讓一個進程中只有一個線程能“順利執行”,執行完畢后再通知其他線程執行。而互斥鎖是典型的互斥機制,對資源加以保護,在這期間不允許其他現場對保護的內容進行讀寫操作。通過信號量和條件變量都可以實現經典的生產者消費者模式。

上一篇:FS4412-Android4.4 HDMI移植

下一篇:關于進程間通信

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 在教室里揉老师的胸动态图 | 亚洲Av永久无码精品无码流畅 | 亚洲av中文无码乱人伦在线播放 | 亚洲无日韩码精品 | 欧美激情精品久久久久久 | 日本高清在线观看视频WWW色 | 日本丶国产丶欧美色综合 | 曰批一级视频播放 | 天天躁夜夜躁狠狠久久成人网 | 夜夜高潮夜夜爽夜夜爱爱 | 久久99国产精品成人 | 精品久久人妻AV中文字幕 | 久久综合在线 | 久久亚洲国产成人精品性色 | 国产精品色婷婷久久99精品 | 男ji大巴进入女人身体 | 久久天天躁夜夜躁狠狠躁2022 | 撕开校花奶罩揉她娇乳动漫 | 撕开奶罩揉吃奶高潮av在线观看 | 成人a片产无码免费视频奶头鸭度 | 国产仑乱无码内谢 | 中文字幕无码日韩欧毛 | 精品少妇人妻AV无码久久 | 嫩草影院免费观看 | 免费A级毛片无码蜜芽欣赏网 | 各种少妇正面bbw撒尿 | 一級特黃色毛片免費看 | 深夜福利备好纸巾18禁止 | 久久精品国产亚洲AV麻豆长发 | 日本无码人妻精品一区二区蜜桃 | WWW日本少妇| 成人免费A级毛片无码片 | 2020年最新国产精品正在播放 | 国产av无码专区亚洲av软件 | 国产系列丝袜熟女精品网站 | 国产一卡2卡三卡4卡免费网站 | A片粗大的内捧猛烈进出视频 | 亚洲精品久久乱码水蜜桃摄影 | 大乳三级a做爰大乳视频 | 成人a级片 | 亚洲AV无码乱码日韩欧美 |