午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > linux使用共享內存通信的進程同步退出問題

linux使用共享內存通信的進程同步退出問題

熱門標簽:電話機器人哪里有賣的 新鄭電銷外呼系統線路 河北語音電銷機器人 壽光百度地圖標注中心網站 商戶地圖標注 怎樣給景區加百度地圖標注 樺甸電銷機器人 河南智能電話機器人公司 地球地圖標注方法

兩個甚至多個進程使用共享內存(shm)通信,總遇到同步問題。這里的“同步問題”不是說進程讀寫同步問題,這個用信號量就好了。這里的同步問題說的是同步退出問題,到底誰先退出,怎么知道對方退出了。舉個例子:進程負責讀寫數據庫A,進程B負責處理數據。那么進程A得比進程B晚退出才行,因為要保存進程B處理完的數據。可是A不知道B什么時候退出啊。A、B是無關聯的進程,也不知道對方的pid。它們唯一的關聯就是讀寫同一塊共享內存。正常情況下,進程B在共享內存中寫個標識:進程A你可以退出了,也是可以的。不過進程B可能是異常退出,連標識都來不及寫。其次,共享內存用來做數據通信的,加這么個標識感覺不太好,有濫用的感覺。

  采用socket通信沒有這個問題,因為進程B退出怎么也會導致socket斷開,哪怕是超時。但shm卻沒有協議來檢測這些行為,如果自己也做一個未免太麻煩。那就從共享內存下手吧。

  共享內存是由內核來管理的,一個進程刪除本身打開的共享內存并不影響另一個進程的共享內存,哪怕都是同一塊共享內存。這是因為共享內存在內核中一個引用計數,一個進程使用該共享內存就會導致引用計數加1。如果其中一個進程調用了刪除函數,只有這個計數為0才會真正刪除共享內存。那么,需要最后才退出的進程檢測這個計數就可以了。

  在System V的共享內存中,創建一個共享內存會初始化一個結構:


復制代碼
代碼如下:

struct shmid_ds {
struct ipc_perm shm_perm; /* Ownership and permissions */
size_t shm_segsz; /* Size of segment (bytes) */
time_t shm_atime; /* Last attach time */
time_t shm_dtime; /* Last detach time */
time_t shm_ctime; /* Last change time */
pid_t shm_cpid; /* PID of creator */
pid_t shm_lpid; /* PID of last shmat(2)/shmdt(2) */
shmatt_t shm_nattch; /* No. of current attaches */
...
};

使用shmctl函數可以讀取該結構體,其中的shm_nattch就是使用該共享內存的進程數。

  不過,現在有了新的POSIX標準,當然要用新標準了。shm_open創建的共享內存也具有“一個進程刪除本身打開的共享內存并不影響另一個進程的共享內存”的特點。可是用shm_open創建的共享內存不再有上面的結構,那么,內核是怎么管理shm_open創建共享內存??看下面的源碼:


復制代碼
代碼如下:

/* shm_open - open a shared memory file *//p> p>/* Copyright 2002, Red Hat Inc. *//p> p>#include sys/types.h>
#include sys/mman.h>
#include unistd.h>
#include string.h>
#include fcntl.h>
#include limits.h>/p> p>int
shm_open (const char *name, int oflag, mode_t mode)
{
int fd;
char shm_name[PATH_MAX+20] = "/dev/shm/";/p> p> /* skip opening slash */
if (*name == '/')
++name;/p> p> /* create special shared memory file name and leave enough space to
cause a path/name error if name is too long */
strlcpy (shm_name + 9, name, PATH_MAX + 10);/p> p> fd = open (shm_name, oflag, mode);/p> p> if (fd != -1)
{
/* once open we must add FD_CLOEXEC flag to file descriptor */
int flags = fcntl (fd, F_GETFD, 0);/p> p> if (flags >= 0)
{
flags |= FD_CLOEXEC;
flags = fcntl (fd, F_SETFD, flags);
}/p> p> /* on failure, just close file and give up */
if (flags == -1)
{
close (fd);
fd = -1;
}
}/p> p> return fd;
}

我嚓,這就是創建一個普通的文件啊,只是創建的位置在/dev/shm下(也就是RAM上)。再來看看刪除共享內存的函數shm_unlink:


復制代碼
代碼如下:

/* shm_unlink - remove a shared memory file *//p> p>/* Copyright 2002, Red Hat Inc. *//p> p>#include sys/types.h>
#include sys/mman.h>
#include unistd.h>
#include string.h>
#include limits.h>/p> p>int
shm_unlink (const char *name)
{
int rc;
char shm_name[PATH_MAX+20] = "/dev/shm/";/p> p> /* skip opening slash */
if (*name == '/')
++name;/p> p> /* create special shared memory file name and leave enough space to
cause a path/name error if name is too long */
strlcpy (shm_name + 9, name, PATH_MAX + 10);/p> p> rc = unlink (shm_name);/p> p> return rc;
}

這也只是一個普通的unlink函數。也就是說,POSIX標準的共享內存就是一個文件。所謂的“一個進程刪除本身打開的共享內存并不影響另一個進程的共享內存”就相當于你用fstream對象打開了一個文件,然后去文件夾把文件刪除了(也就是對文件進行了unlink操作),可是fstream對象還可以正常讀寫文件,并沒有什么引用計數。這下好了,進程退出時又沒法同步了。

  不過,在linux下怎么會有解決不了的問題呢?解決不了只能說明自己太菜。既然是文件,那就從文件下手。那文件有什么是原子操作,又可以計數的呢。答案:硬鏈接。比如:


復制代碼
代碼如下:

xzc@xzc-HP-ProBook-4446s:/dev/shm$ stat abc
文件:"abc"
大小:4 塊:8 IO 塊:4096 普通文件
設備:15h/21d Inode:5743159 硬鏈接:1
權限:(0664/-rw-rw-r--) Uid:( 1000/ xzc) Gid:( 1000/ xzc)
最近訪問:2015-01-25 21:27:00.961053098 +0800
最近更改:2015-01-25 21:27:00.961053098 +0800
最近改動:2015-01-25 21:27:00.961053098 +0800
創建時間:-
xzc@xzc-HP-ProBook-4446s:/dev/shm$

這個硬鏈接可以通過fstat函數獲取。可是要這樣實現的話,意味著需要先創建一塊共享內存,每個進程引用的時候需要調用link函數來創建一個硬鏈接。問題解決了,可是這樣會在/dev/shm下多個N多個文件。這可是RAM啊,雖然現在的服務器都比較牛,但這樣做也不太好吧。好吧,還有一個flock文件鎖。flock使用LOCK_SH參數多個進程對同一個文件加鎖。這樣,進程B初始化共享內存時加鎖(可以有多個這樣的進程),在退出(包括異常退出)時解鎖。進程A在退出時檢測這個鎖。當發現無鎖時說明可以安全退出了。

  同步退出的問題基本解決了。來不及寫代碼去驗證,下次吧。

PS:內核unlink時應該也是有計數才知道當前有沒有進程打開文件,在什么時候應該刪除文件。這個還得去查資料,看用不用得上。另外lsof這個工具是可以檢測到所有打開該共享內存的進程及相應的狀態。這個應該也是有對應的api的,只是現在還沒搞懂。

標簽:阜陽 來賓 迪慶 忻州 遼陽 荊州 楚雄 淄博

巨人網絡通訊聲明:本文標題《linux使用共享內存通信的進程同步退出問題》,本文關鍵詞  linux,使用,共享,內存,通信,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《linux使用共享內存通信的進程同步退出問題》相關的同類信息!
  • 本頁收集關于linux使用共享內存通信的進程同步退出問題的相關信息資訊供網民參考!
  • 推薦文章
    好吊一区二区三区视频| 超碰精品一区二区三区乱码| 国产毛片毛片毛片毛片| 99久久99久久精品国产片| 五月天激情小说综合| 五级黄高潮片90分钟视频| 国产91精品久久久久久久| 亚洲精品乱码久久久久| 青青操国产视频| 精品久久99ma| 久久久久久蜜桃| 色综合色综合网色综合| 一区二区三区久久| 无码国精品一区二区免费蜜桃| 可以免费看的黄色网址| 亚洲国产日韩欧美在线99| 午夜精品视频一区| 欧美日韩一卡二卡三卡 | 无码国产精品高潮久久99| 青青青手机在线视频| 在线观看欧美一区| 中文字幕精品www乱入免费视频| 亚洲欧洲精品一区二区精品久久久| 久久精品欧美一区二区| 亚洲第一页自拍| 国产精品久久久久久久妇| 国产精品免费一区豆花| 在线视频一区二区三区| 91麻豆免费观看| 人妻无码一区二区三区免费| 欧美日韩亚洲国产成人| 国产aⅴ精品一区二区三区黄| 国产精品亚洲片夜色在线| 成人h猎奇视频网站| 国产日韩精品视频| 日韩成人网免费视频| 高清不卡在线观看| 真实国产乱子伦对白在线| 国产精品无码乱伦| 欧美成人合集magnet| 波多野结衣大片| 免费av在线一区二区| 尤物av一区二区| 色婷婷av一区二区三区之e本道| 亚洲不卡视频在线观看| 日韩精品视频久久| 91黄在线观看| 国产精品中文在线| 成人午夜视频免费观看| 中文字幕乱妇无码av在线| 黄页网站在线看| 亚洲精品色午夜无码专区日韩| 精品少妇人欧美激情在线观看| 欧洲成人午夜免费大片| 欧美日韩精品欧美日韩精品一| 中文字幕中文字幕在线一区| 国产在线看一区| 亚洲人一区二区| 亚洲国产精品成人一区二区| 色一情一乱一区二区三区| 日本成人黄色网| 天天干在线影院| 欧美极品一区| 亚洲一区二区久久久久久| 日韩一区二区久久久| 欧美xxxx在线观看| 在线影视一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 日韩美女视频一区二区在线观看| 国产成人无码精品久在线观看 | 欧美久久久精品| 午夜欧美视频在线观看 | 风间由美性色一区二区三区 | 日韩欧美亚洲国产一区| 精品久久久一区| 欧美日韩精品中文字幕| 久久中文娱乐网| 91丨porny丨在线中文 | 国产精品一区二区6| 日韩成人手机在线| 91精品国产乱码久久久久久久久| 欧美性猛交xxxx久久久| 日韩久久精品一区| 日本高清视频一区二区| 在线精品视频一区二区三四| 欧美日韩午夜在线| 欧美激情按摩在线| 日韩日韩日韩日韩日韩| 99成人在线观看| 秋霞国产午夜精品免费视频| 久久天天做天天爱综合色| 中文字幕一区二区三区在线观看 | 精品久久久久成人码免费动漫| 自拍另类欧美| 伊人久久大香线蕉精品| 精品成a人在线观看| 国产欧美日韩亚州综合| 人妻无码中文字幕| 人妻互换一区二区激情偷拍| 精品人妻无码一区二区性色| 神马午夜精品95 | 日韩精彩视频| 成年人深夜视频| 国产无码精品在线播放| av在线综合网| 日韩资源在线观看| 精品国产一二| 一本色道久久综合亚洲二区三区| 日本一区二区精品视频| 中文字幕在线乱| 人妻无码一区二区三区四区| 搡女人真爽免费午夜网站| 真人bbbbbbbbb毛片| 国产aⅴ精品一区二区三区黄| 亚洲最新在线视频| 色哟哟国产精品免费观看| 99久久99久久久精品齐齐| 亚洲午夜久久久久久久久电影网| 欧美日韩久久不卡| 日韩一区二区三区电影| 爱福利视频一区| 444亚洲人体| 国产日韩欧美在线观看视频| 久久久亚洲精品一区二区三区| 久久全国免费视频| 国产人妻777人伦精品hd| www.国产一区二区| 国产日韩亚洲欧美综合| 一区二区三区在线播放| 欧美性生活久久| 欧美最猛性xxxxx(亚洲精品)| 日本老师69xxx| 免费在线观看91| 亚洲国产日韩综合一区| 中文字幕av导航| 中文字幕在线亚洲三区| 97人妻精品一区二区三区免费| 一级二级黄色片| 亚洲国产成人精品激情在线| 麻豆91精品视频| 亚洲午夜精品久久久久久久久| 亚瑟在线精品视频| 岛国av在线不卡| 亚洲第一级黄色片| 69精品丰满人妻无码视频a片| 日本少妇色视频| av中文在线播放| 国内久久婷婷综合| 亚洲18色成人| 亚洲影视在线观看| 久久99热精品这里久久精品| 亚洲一区二区三区精品在线观看 | 国产亚洲欧美精品久久久久久| 欧美日韩国产页| 久久久久久久久久久久久9999| 精品国产一二区| 国产精品国产三级国产专区52| 久草精品在线观看| 欧美日韩国产另类不卡| 日本免费久久高清视频| 97免费资源站| 亚洲精品蜜桃久久久久久| 亚洲第一视频区| 亚洲黄色av一区| 欧美精品亚州精品| 精品一区二区不卡| 亚洲欧美激情一区二区三区| 熟妇高潮一区二区三区| 国产精选久久久| 欧美日韩精品国产| 国产精品永久免费| 久久一级免费视频| 国产人成亚洲第一网站在线播放| 中文字幕av一区中文字幕天堂| 97超级碰碰| 亚洲精品高清视频| 亚洲AV无码成人精品区明星换面| 自拍偷拍色综合| 精品亚洲国内自在自线福利| 中文字幕综合网| 欧美日韩成人网| 国产18无套直看片| 久久久久久久久一| 欧美日韩国产大片| av资源一区二区| 日本中文字幕免费在线观看| 大地资源二中文在线影视观看| 国产成人午夜视频| 精品国模在线视频| 国产美女在线一区| 激情都市一区二区| 久久精品视频99| 日韩亚洲视频| 你真棒插曲来救救我在线观看| 国产污片在线观看| 久久精品欧美一区二区三区麻豆 | 久久久久久久久久久免费精品 | 美国一级片在线观看| 亚洲乱熟女一区二区| 欧美精品三级在线观看| 日本一区二区三区www| 午夜视频在线观看国产| 人妻无码中文字幕免费视频蜜桃| 精品国产污网站| 日韩国产在线一区| 成人高清视频在线| 亚洲永久激情精品| 欧美经典一区二区| 一区二区三区偷拍| 日本不卡免费在线视频| 2019中文字幕免费视频| 91在线直播亚洲| 韩国三级hd中文字幕| 国产三级一区二区三区| 国产伦精品一区二区三区高清| 亚洲 国产 日韩 欧美| 在线免费观看不卡av| 国产精品成人aaaaa网站| 亚洲 欧美 另类人妖| 成人免费高清在线| 日本xxxxx18| 日本在线观看不卡视频| 欧美精选午夜久久久乱码6080| 亚洲一区精彩视频| 久久亚洲电影| 欧美一区二区三区色| 国产欧美精品一区二区三区-老狼| 99成人在线观看| 欧美日韩国产精品成人| 黄色正能量网站| 最近免费中文字幕视频2019| 国产精品久久免费| 污视频在线免费观看一区二区三区| 粉嫩av一区二区三区| 青青草综合在线| 美国av一区二区| 国产精品美女主播| 精品99久久久久成人网站免费| 91精品国产91综合久久蜜臀| 国产毛片视频网站| 老牛国产精品一区的观看方式| 神马久久桃色视频| 午夜免费福利视频在线观看| 成人精品高清在线| 精品欧美国产| 久久精品人人爽人人爽| 亚洲黄色一区二区三区| 亚洲一区二区色| 亚洲精品视频网上网址在线观看| 亚洲午夜福利在线观看| 亚洲成人动漫在线观看| 538国产精品视频一区二区| 天天天天天天天干| 亚洲人成五月天| 日韩毛片在线视频| 992tv在线成人免费观看| 97人妻一区二区精品免费视频| 欧美激情亚洲视频| 日本高清www| 亚洲最大色网站| 白白操在线视频| 国产精品系列在线播放| 国产精品盗摄久久久| 亚洲最大免费视频| 欧美日韩久久久久| 天天躁日日躁狠狠躁免费麻豆| 色老头一区二区三区在线观看| 久久r这里只有精品| 国产一区二区三区在线看| 动漫精品一区一码二码三码四码| 中文字幕在线成人| 91精品国产毛片武则天| 亚洲黄色小说网站| 日日橹狠狠爱欧美超碰| 国产精品成人午夜| 右手影院亚洲欧美| 国产黑人绿帽在线第一区| 91色porny| 亚洲成人av免费在线观看| 日本一区二区不卡| 成人黄色一级视频| 国产免费色视频| 久久精品免费在线观看| 国产女人18毛片| 亚洲色图清纯唯美| 91热视频在线观看| 亚洲色图激情小说| 无码人妻丰满熟妇奶水区码| 亚洲精品小视频| gv天堂gv无码男同在线观看| 一本色道久久综合狠狠躁篇怎么玩 | 99精品视频在线免费观看| 免费毛片网站在线观看| 久久青草国产手机看片福利盒子| 国产精品国产精品国产专区蜜臀ah | 国产一区二区无遮挡| 久久这里都是精品| 中文字幕精品—区二区日日骚| 蜜桃久久av一区| 麻豆av一区| 国产三级一区二区三区| 九九久久久久久| 欧美日韩视频在线第一区| 在线观看欧美一区二区| 欧美日韩一区不卡| 亚洲高清精品视频| 日本熟妇人妻中出| 日韩av影视在线| 精品久久久无码中文字幕| 国产精品国产三级欧美二区| 亚洲视频网在线直播| 欧美精品一区二区三区在线看午夜| 国产亚洲欧美一级| 亚洲成a人无码| 亚洲精品日韩欧美| a视频免费在线观看| 日本不卡久久| 天天色天天操综合| 最新av免费在线观看| 在线观看国产91| 欧美日韩在线国产| 日本三级久久久| 国产大片免费看| 日本一本a高清免费不卡| 久久香蕉精品| 久久亚洲中文字幕无码| 欧美一区日本一区韩国一区| 紧缚奴在线一区二区三区| 国产成人一区二区在线观看| 国产精品流白浆视频| av影院午夜一区| 四季av中文字幕| 欧美日韩视频一区二区| 国产精品嫩草69影院| 中文字幕一区二区三区电影| 国精产品一区一区三区mba桃花| 日本一二三区在线| 国产一级精品aaaaa看| 久久精品国产久精国产思思| 亚洲国产乱码最新视频 | 国产麻豆91视频| 久久撸在线视频| 一区二区三区视频免费在线观看| 麻豆极品一区二区三区| 日韩中文字幕二区| 情事1991在线| 亚洲国产一区视频| 亚洲天堂中文在线| 日韩免费视频播放| 欧美精品在线观看一区二区| 国产婷婷在线视频| 九九热精品视频| 久久久久成人黄色影片| 国产黄色美女视频| 中文字幕91视频| 国产精品免费一区二区| 日韩欧美视频一区二区三区| 亚洲av无码乱码国产精品| 中国黄色a级片| 日本视频精品一区| 欧美国产日韩一二三区| 欧美日韩在线观看免费| 国产91xxx| 成人国产精品一区二区| 精品久久久久av影院| 亚洲伊人伊色伊影伊综合网| 99久久婷婷国产| 久久婷婷亚洲| 日韩不卡在线播放| 国产不卡的av| avav在线看| 亚洲国产精品影视| 日韩免费在线观看视频| 午夜成人免费电影| 国产一区中文字幕| 欧美精品欧美极品欧美激情| 狠狠色综合网站久久久久久久| 欧美日韩免费高清一区色橹橹| 久久久久国产精品一区二区| www.17c.com喷水少妇| 激情伦成人综合小说| 欧美色大人视频| 久久综合综合久久综合| 久草资源在线视频| 亚洲视频在线a| 亚洲黄色成人久久久| 91精品免费视频| 高清欧美性猛交xxxx黑人猛交| 一区二区三区在线视频观看58 | 成人午夜在线影院| 欧美精品一区二区三区很污很色的| a级片在线播放| www一区二区www免费| 国产91视觉| 7m精品福利视频导航| 亚洲第一精品福利| 欧美一区二区国产| 欧美精品久久99久久在免费线| 色94色欧美sute亚洲线路一ni| 亚洲va天堂va国产va久| 精品久久香蕉国产线看观看亚洲 | 久久久久亚洲无码| www.xxx亚洲| 综合视频免费看| 成人久久久久久| 亚洲精品在线91| 欧美亚洲国产怡红院影院| 亚洲成a人v欧美综合天堂| 成人小视频免费观看| 性少妇videosexfreexxx片|