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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux IPC实践(12) --System V信号量(2)

發(fā)布時(shí)間:2025/3/17 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux IPC实践(12) --System V信号量(2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

實(shí)踐1:信號(hào)量實(shí)現(xiàn)進(jìn)程互斥

父子進(jìn)程執(zhí)行流程如下:

父進(jìn)程

子進(jìn)程

P

P

O(print)

X(print)

sleep

sleep

O(print)

X(print)

V

V

sleep

sleep

從圖中可以看出,?O或X總是成對(duì)出現(xiàn)的,?要么兩個(gè)O,?要么兩個(gè)X;

/**P,V原語(yǔ)實(shí)現(xiàn)父子進(jìn)程互斥使用終端**/ // 程序代碼 int main(int argc,char *argv[]) {int semid = sem_create(IPC_PRIVATE);sem_setval(semid, 1);int count = 10;pid_t pid = fork();if (pid == -1)err_exit("fork error");else if (pid > 0) //子進(jìn)程{srand(getpid());while (count --){sem_P(semid);//臨界區(qū)開(kāi)始cout << 'X';fflush(stdout); //一定要加上ffflush, 因?yàn)橹袛嗍切芯彌_的sleep(rand()%3);cout << 'X';fflush(stdout);//臨界區(qū)結(jié)束sem_V(semid);sleep(rand()%3);}}else //父進(jìn)程{srand(getpid());while (count --){sem_P(semid);//臨界區(qū)開(kāi)始cout << 'O';fflush(stdout);sleep(rand()%3);cout << 'O';fflush(stdout);//臨界區(qū)結(jié)束sem_V(semid);sleep(rand()%3);}wait(NULL);sem_delete(semid);}return 0; }

實(shí)踐2:?信號(hào)量集解決哲學(xué)家進(jìn)餐問(wèn)題

? ?假設(shè)有五位哲學(xué)家圍坐在一張圓形餐桌旁,做以下兩件事情之一:吃飯,或者思考。吃東西的時(shí)候,他們就停止思考,思考的時(shí)候也停止吃東西。每?jī)蓚€(gè)哲學(xué)家之間有一只餐叉。因?yàn)橛靡恢徊筒婧茈y吃飯,所以假設(shè)哲學(xué)家必須用兩只餐叉吃東西,?而且他們只能使用自己左右手邊的那兩只餐叉。

/** 解決的方法采用的是: 只有左右兩個(gè)刀叉都能夠使用時(shí),才拿起兩個(gè)刀叉 實(shí)現(xiàn)了有死鎖和無(wú)死鎖的兩種形式的wait_2fork(見(jiàn)下) **/int semid; //沒(méi)有死鎖的wait void wait_2fork(unsigned short no) {unsigned short left = no;unsigned short right = (no+1)%5;struct sembuf sops[2] = {{left, -1, 0}, {right, -1, 0}};//同時(shí)獲取左右兩把刀叉if (semop(semid, sops, 2) == -1)err_exit("wait_2fork error"); } /* //有死鎖的wait void wait_2fork(unsigned short no) {unsigned short left = no;unsigned short right = (no+1)%5;struct sembuf sops = {left, -1, 0};//獲取左邊的刀叉if (semop(semid, &sops, 1) == -1)err_exit("wait_2fork error");sleep(4); //沉睡幾秒, 加速死鎖的產(chǎn)生sops.sem_num = right;//獲取右邊的刀叉if (semop(semid, &sops, 1) == -1)err_exit("wait_2fork error"); } */ //釋放兩把刀叉 void signal_2fork(unsigned short no) {unsigned short left = no;unsigned short right = (no+1)%5;struct sembuf sops[2] = {{left, 1, 0}, {right, 1, 0}};if (semop(semid, sops, 2) == -1)err_exit("signal_2fork error"); } //哲學(xué)家 void philosopher(unsigned short no) {srand(time(NULL));while (true){cout << no << " is thinking" << endl;sleep(rand()%5+1);cout << no << " is hunger" << endl;wait_2fork(no); //獲取兩把刀叉//進(jìn)餐cout << "++ " << no << " is eating" << endl;sleep(rand()%5+1);signal_2fork(no);//釋放兩把刀叉} } int main() {// 創(chuàng)建一個(gè)信號(hào)量集: 里面包含5個(gè)信號(hào)量semid = semget(IPC_PRIVATE, 5, IPC_CREAT|0666);if (semid == -1)err_exit("semget error");//將每個(gè)信號(hào)量都設(shè)初值為1union semun su;su.val = 1;for (int i = 0; i < 5; ++i)if (semctl(semid, i, SETVAL, su) == -1)err_exit("semctl SETVAL error");//創(chuàng)建四個(gè)子進(jìn)程, 將每個(gè)進(jìn)程的編號(hào)設(shè)定為nopid_t pid;unsigned short no = 0;for (unsigned short i = 0; i < 4; ++i){pid = fork();if (pid == -1)err_exit("fork error");else if (pid == 0){no = i+1;break;}}// 最后五個(gè)進(jìn)程(4個(gè)子進(jìn)程+1個(gè)父進(jìn)程)都會(huì)匯集到此處,// 每個(gè)進(jìn)程代表著一個(gè)哲學(xué)家,編號(hào)no: 0~4philosopher(no);return 0; }
新人創(chuàng)作打卡挑戰(zhàn)賽發(fā)博客就能抽獎(jiǎng)!定制產(chǎn)品紅包拿不停!

總結(jié)

以上是生活随笔為你收集整理的Linux IPC实践(12) --System V信号量(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线视频卡一卡二 | 污网站免费在线观看 | 亚欧三级 | 美女网站av | 亚洲aa视频| 超碰97在线资源站 | 91看片在线播放 | 欧美在线你懂的 | 久久重口味 | 丝袜ol美脚秘书在线播放 | 亚洲国产欧美另类 | 91人人澡人人爽人人精品 | 美女的奶胸大爽爽大片 | 福利国产在线 | 又黄又爽又色视频 | 日本后进式猛烈xx00动态图 | 亚洲乱码国产乱码精品精98午夜 | av一卡| 91精品国产成人www | 欧美大胆a | 色屁屁影院www国产高清麻豆 | 亚洲av成人精品毛片 | 免费爱爱视频网站 | 国产成人愉拍精品久久 | 欧美日韩精品在线播放 | 本站只有精品 | 全部毛片永久免费看 | 老熟女高潮一区二区三区 | 国产三级精品在线观看 | 成人免费视频国产免费麻豆 | 色中文网 | 国产亚洲色婷婷久久99精品91 | 国产cao| 一区视频在线 | 女优中文字幕 | 日韩专区视频 | 国产精品视频在线观看免费 | 国产 日韩 欧美 精品 | 国产精品视频1区 | 不卡视频在线观看 | 精东影业一区二区三区 | 精品一区二区三区中文字幕 | 欧美三级韩国三级日本三斤在线观看 | 在线视频国产一区 | 五月丁香久久婷婷 | 豆花视频在线播放 | 色午夜av | 日本韩国中文字幕 | 国产免费一区二区视频 | 麻豆中文字幕 | 欧美性生活一区二区 | 亚洲av无码一区二区乱孑伦as | 不卡中文 | 成人久久一区二区 | 精品av一区二区 | 国产午夜精品一区二区三区 | 男人操女人的视频 | 91免费精品视频 | 骚鸭av | 亚洲精品一区二区三区蜜桃 | 亚洲三区在线 | 麻豆免费av | 国产精品久久久av | 寂寞少妇让水电工爽hd | 亚洲欧美日本一区二区三区 | 国产精品资源站 | 成人一区二区三区视频 | 日日夜夜狠狠 | 美足av电影 | 中文字字幕第183页 欧美特级一级片 | 天堂在线中文资源 | 性av网| 影音先锋中文字幕在线视频 | 色综合天天干 | av国产一区二区 | 被室友玩屁股(h)男男 | 欧美视频a | 麻豆一区二区三区在线观看 | 国产午夜麻豆影院在线观看 | 一级日韩一级欧美 | 青青青在线免费 | 日本不卡高字幕在线2019 | 在线 日本 制服 中文 欧美 | 精品欧美色视频网站在线观看 | 亚洲最大在线观看 | 自拍偷自拍亚洲精品播放 | 人妻 日韩精品 中文字幕 | 国产亚洲精品码 | 日本zzjj| 日韩乱淫 | 亚洲免费网址 | 黄色福利在线观看 | 日韩在线视频看看 | 捆绑调教视频网站 | 山村大伦淫第1部分阅读小说 | 欧美人与动牲交xxxxbbbb | 天天草天天射 | 日韩欧美在线视频观看 | 欧美日韩亚洲系列 |