色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號

回到頂部

主站蜘蛛池模板: 99精品视屏 | 天堂69堂在线精品视频软件 | 午夜男女无遮挡拍拍视频 | 无码任你躁久久久久久 | 风韵丰满熟妇啪啪区老老熟妇 | 亚洲aⅴ无码成人网站国产 婷婷亚洲精品久久无码一区二区三区 | 久久精品日日躁夜夜躁 | 国产精品亚洲W码日韩中文 亚洲精品欧美综合二区 | 扒开双腿疯狂进出爽爽爽视频 | 免费一对一刺激互动聊天软件 | 国产高清吃奶成免费视频网站 | 中文字幕线观看 | 人人妻人人澡人人爽欧美一在内谢 | 天天做天天爱天天爽综合网 | 国产AV无码专区亚洲AV中文 | 天干夜天天夜天干天 | 亚洲无亚洲人成网站77777 | 久久精品国产国产精 | 国产精口品美女乱子伦高潮 | 国产一区二区三区四区大学生 | 春药刺激国产老富婆露脸 | av中出| 亚洲av无码国产精品色软件 | 精品人妻少妇一区二区三区 | 欧美极度丰满熟妇hd | 亚洲成熟人网站 | 亚洲欧美精品一中文字幕 | seseav在线| 亚洲加勒比无码一区二区 | 人妻少妇被粗大爽.9797pw | 亚洲一区二区网址 | 欧美成人V片在线观看 | 免费无码成人片 | "www 超碰 com"| 一二三四在线视频观看社区 | 两个人在线观看WWW视频 | 中国三级黄色录像 | 日本在线一级片 | www.av毛片 | 日本熟妇无码色视频网站 | 欧美人妻一区二区三区 |