日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux 线程信号量同步

發布時間:2023/11/30 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 线程信号量同步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://www.cnblogs.com/jiqingwu/p/linux_semaphore_example.html

信號量和互斥鎖(mutex)的區別:互斥鎖只允許一個線程進入臨界區,而信號量允許多個線程同時進入臨界區。

不多做解釋,要使用信號量同步,需要包含頭文件semaphore.h。

主要用到的函數:

  • int sem_init(sem_t *sem, int pshared, unsigned int value);,其中sem是要初始化的信號量,pshared表示此信號量是在進程間共享還是線程間共享,value是信號量的初始值。
  • int sem_destroy(sem_t *sem);,其中sem是要銷毀的信號量。只有用sem_init初始化的信號量才能用sem_destroy銷毀。
  • int sem_wait(sem_t *sem);等待信號量,如果信號量的值大于0,將信號量的值減1,立即返回。如果信號量的值為0,則線程阻塞。相當于P操作。成功返回0,失敗返回-1。
  • int sem_post(sem_t *sem);?釋放信號量,讓信號量的值加1。相當于V操作。

下列的代碼演示了如何用信號量同步,模擬一個窗口服務系統。

/* @purpose: 基于信號量的多線程同步,操作系統原理中的P,V操作* @author: jollywing@foxmail.com* @create: 2015-03-20 Fri* */#include <pthread.h> #include <semaphore.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h>/* @Scene: 某行業營業廳同時只能服務兩個顧客。* 有多個顧客到來,每個顧客如果發現服務窗口已滿,就等待,* 如果有可用的服務窗口,就接受服務。 *//* 將信號量定義為全局變量,方便多個線程共享 */ sem_t sem;/* 每個線程要運行的例程 */ void * get_service(void *thread_id) {/* 注意:立即保存thread_id的值,因為thread_id是對主線程中循環變量i的引用,它可能馬上被修改 */int customer_id = *((int *)thread_id);if(sem_wait(&sem) == 0) {usleep(100); /* service time: 100ms */printf("customer %d receive service ...\n", customer_id);sem_post(&sem);} }#define CUSTOMER_NUM 10int main(int argc, char *argv[]) {/* 初始化信號量,初始值為2,表示有兩個顧客可以同時接收服務 *//* @prototype: int sem_init(sem_t *sem, int pshared, unsigned int value); *//* pshared: if pshared == 0, the semaphore is shared among threads of a process* otherwise the semaphore is shared between processes. */sem_init(&sem, 0, 2);/* 為每個顧客定義一個線程id, pthread_t 其實是unsigned long int */pthread_t customers[CUSTOMER_NUM];int i, ret;/* 為每個顧客生成一個線程 */for(i = 0; i < CUSTOMER_NUM; i++){int customer_id = i;ret = pthread_create(&customers[i], NULL, get_service, &customer_id);if(ret != 0){perror("pthread_create");exit(1);}else {printf("Customer %d arrived.\n", i);}usleep(10);}/* 等待所有顧客的線程結束 *//* 注意:這地方不能再用i做循環變量,因為可能線程中正在訪問i的值 */int j;for(j = 0; j < CUSTOMER_NUM; j++) {pthread_join(customers[j], NULL);}/* Only a semaphore that has been initialized by sem_init(3)* should be destroyed using sem_destroy().*/sem_destroy(&sem);return 0; }

編譯:gcc main.c -lpthread。

運行結果(注意,每次運行都不相同):

Customer 0 arrived. Customer 1 arrived. customer 0 receive service ... Customer 2 arrived. customer 1 receive service ... Customer 3 arrived. customer 2 receive service ... Customer 4 arrived. customer 3 receive service ... Customer 5 arrived. customer 4 receive service ... Customer 6 arrived. customer 5 receive service ... Customer 7 arrived. customer 6 receive service ... Customer 8 arrived. customer 7 receive service ... Customer 9 arrived. customer 8 receive service ... customer 9 receive service ...

總結

以上是生活随笔為你收集整理的Linux 线程信号量同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色爱视频 | 欧美三级国产 | 天天干天天舔天天射 | 少妇太爽了在线观看 | 天堂在线视频观看 | 欧美成人乱码一二三四区免费 | 久久综合中文 | 日韩成人高清视频在线观看 | 日韩中文字幕影院 | 黄色片子免费看 | 德国老妇性猛交 | 亚洲一级片在线观看 | 欧美日本二区 | 深夜国产福利 | 日韩免费一区二区 | 超碰66| av作品在线| 国产91在线精品 | 性爽爽| 国产精品视频在线播放 | 天天操天天做 | 国产又粗又猛又爽免费视频 | 粉嫩一区二区三区 | 精品国产综合区久久久久久 | 四虎少妇做爰免费视频网站四 | 激情成人综合网 | 香蕉一区二区三区四区 | 欧美日本一区 | 欧美日韩亚洲视频 | 免费中文字幕在线观看 | 天天天天干 | 国产美女又黄又爽又色视频免费 | 欧美性猛交久久久久 | 在线观看一二三区 | 夜夜爱爱 | 毛茸茸多毛bbb毛多视频 | 伊人成长网 | 国产制服av | 午夜精品在线免费观看 | 福利视频黄色 | 国产视频福利 | 日韩污污 | 日韩视频福利 | 久久青草热 | 日韩一区二区三区精品视频 | 国产精品伦一区二区三区 | 日本中文在线观看 | 欧美一区二区三区小说 | 九九热精品视频在线播放 | 欧美性理论片在线观看片免费 | 99热播| 性欧美一区二区三区 | 欧美日韩午夜激情 | 国产一区二区三区18 | 91在线观看免费高清完整版在线观看 | 天天爽天天爽夜夜爽毛片 | 欧美熟妇毛茸茸 | 中文字幕精品一区二区三区精品 | 99热在线这里只有精品 | 黄色a∨| 国产丝袜美腿一区二区三区 | 97香蕉久久夜色精品国产 | 亚洲骚图 | 久久久性色精品国产免费观看 | 日日躁夜夜躁狠狠躁 | 四虎三级 | 亚洲自拍偷拍网站 | 三级小视频在线观看 | av片免费在线播放 | 久草手机在线观看 | 成人羞羞国产免费 | 欧美人一级淫片a免费播放 西方av在线 | 欧美亚洲另类小说 | 亚洲一区第一页 | 欧美日韩三 | 亚洲精品www久久久久久 | 西方裸体在线观看 | 18禁免费无码无遮挡不卡网站 | 日本黄色免费网站 | 欧美日韩一区二区三区 | 黄色伊人网 | 五月天精品在线 | 7799精品视频天天看 | 亚洲乱码视频 | 亚洲国产永久 | www黄色av| 自拍1页 | 邻居校草天天肉我h1v1 | 国产成人综合网 | 欧美日韩亚洲视频 | 91精品国产99久久久久久红楼 | 神马久久久久久 | 婷婷中文网| 99精品视频一区二区 | 青青青视频免费观看 | 欧美xxxxxhd | 免费v片在线观看 | 香蕉久久av一区二区三区 | 亚洲AV无码精品自拍 |