成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

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

linux使用共享內(nèi)存通信的進程同步退出問題

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

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

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

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

  在System V的共享內(nèi)存中,創(chuàng)建一個共享內(nèi)存會初始化一個結(jié)構(gòu):


復(fù)制代碼
代碼如下:

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函數(shù)可以讀取該結(jié)構(gòu)體,其中的shm_nattch就是使用該共享內(nèi)存的進程數(shù)。

  不過,現(xiàn)在有了新的POSIX標準,當然要用新標準了。shm_open創(chuàng)建的共享內(nèi)存也具有“一個進程刪除本身打開的共享內(nèi)存并不影響另一個進程的共享內(nèi)存”的特點??墒怯胹hm_open創(chuàng)建的共享內(nèi)存不再有上面的結(jié)構(gòu),那么,內(nèi)核是怎么管理shm_open創(chuàng)建共享內(nèi)存??看下面的源碼:


復(fù)制代碼
代碼如下:

/* 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;
}

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


復(fù)制代碼
代碼如下:

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

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


復(fù)制代碼
代碼如下:

xzc@xzc-HP-ProBook-4446s:/dev/shm$ stat abc
文件:"abc"
大?。? 塊:8 IO 塊:4096 普通文件
設(shè)備:15h/21d Inode:5743159 硬鏈接:1
權(quán)限:(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
創(chuàng)建時間:-
xzc@xzc-HP-ProBook-4446s:/dev/shm$

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

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

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

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《linux使用共享內(nèi)存通信的進程同步退出問題》,本文關(guān)鍵詞  linux,使用,共享,內(nèi)存,通信,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux使用共享內(nèi)存通信的進程同步退出問題》相關(guān)的同類信息!
  • 本頁收集關(guān)于linux使用共享內(nèi)存通信的進程同步退出問題的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美在线观看不卡| 欧美做爰性生交视频| 91av在线免费观看视频| 青青青青久久精品国产一百度| 色综合久久综合中文综合网| 一区二区影视| 日本一区二区三区网站| 日韩一级免费一区| 欧美日本韩国一区二区三区视频| 国产精品中文字幕在线| 免费观看成人www动漫视频| 欧美性受xxxx黑人| 亚洲一区国产一区| 日韩精品中文字幕在线不卡尤物| 亚洲区小说区图片区qvod按摩| 在线激情影院一区| 亚洲第一二三区| 成人激情自拍| 欧美精品免费在线观看| 欧美在线视频全部完| 九九热99视频| 伊人久久久久久久久| 香蕉久久夜色精品| 一本岛在免费一二三区| 香蕉视频成人在线| 亚洲欧美日韩中文字幕一区二区三区| 日韩欧美精品在线不卡| 少妇在线看www| 国产精品一区二区三区视频网站| 理论片在线观看理伦片| 精品国产91乱码一区二区三区四区| 国产97在线|亚洲| 激情综合丝袜美女一区二区| 国产精品12| 天天综合网色中文字幕| 亚洲精选成人| 精品在线观看免费| 欧美综合视频| 性色a∨人人爽网站| 日产电影一区二区三区| 日本我和搜子同居的日子高清在线| 成人av一区二区三区| 国产亚洲精品自在久久| 在线播放日韩欧美| eeuss网址直达入口| 最近中文字幕在线6| 五月婷婷激情网| 综合中文字幕亚洲| 欧美一区二区三区精品| 狠狠狠狠狠狠操| 欧美日韩大片在线观看| 在线成人免费视频| 国产成人免费观看网站| 精品久久久久人成| 精品露脸国产偷人在视频| 欧美—级高清免费播放| 亚洲不卡在线观看| 亚洲国产成人91精品| 免费一级片91| 石原莉奈在线亚洲二区| aaaa黄色片| 蜜桃视频在线观看免费视频网站www| 成人免费视频网站| 欧美少妇一区二区| 久久夜色精品国产噜噜av小说| 日本 国产 欧美色综合| 视频一区三区| 免费观看的av| 欧美大奶子在线| 日本美女一级片| 91精品国产91久久久久久一区二区| 精品99在线视频| 国产视频1区2区3区| 精品国产老师黑色丝袜高跟鞋| 中文日产幕无线码一区二区| 欧洲精品久久一区二区| 自由日本语热亚洲人| 亚洲色图欧美在线| 亚洲一区综合| 激情小说亚洲图片| 日本精品久久| 国产一区二区无遮挡| 最新91在线| 色婷婷成人网| 超碰精品在线观看| 国产精品99久久久久久白浆小说| 国产综合av| 国产米奇在线777精品观看| 国产理论电影在线观看| 亚洲精品日韩欧美| 日韩三级视频| 最新电影电视剧在线观看免费观看| 可骚可骚的黄视频网站| 青青艹视频在线| 日日摸天天添天天添破| 国产成人综合在线播放| 亚洲第一综合天堂另类专| 亚洲人123区| 中文字幕欧美色图| 国产精品久久婷婷六月丁香| 日韩精品大片| 色婷婷一区二区三区| 成人性生交视频免费观看| 污视频网站免费在线观看| 日韩成人av网站| 羞羞的视频在线| 九九热精品在线| 久久香蕉综合色| 欧美中日韩一区二区三区| 日韩黄色免费观看| 欧美 日韩 国产一区二区在线视频| 久久夜色精品国产噜噜av小说| 一区二区在线视频播放| 日韩中文一区二区三区| 在线欧美日韩精品| 亚州av电影免费在线观看| 久久嫩草精品久久久精品| 亚洲免费观看高清完整版在线| 日本少妇性高潮| 999久久久国产999久久久| 国产精品久久久久久久app| 日本韩国一区二区三区视频| 午夜影院在线视频| 女人天堂av在线播放| 国产精品国内视频| 成人做爰www看视频软件| 日韩av理论片| 日韩精品123| 日本韩国一区二区三区视频| 中文字幕制服丝袜在线| 久久久国产精品免费| 日韩精品一区二区三区蜜臀| 亚洲激情成人在线| 国产av人人夜夜澡人人爽| 自拍偷拍亚洲精品| 久久一区二区三区欧美亚洲| 亚洲国产中文字幕| 国产一区二区三区天码| 中文字幕精品无码一区二区| 日韩美女视频在线| 国产女人水真多18毛片18精品视频| 最新四虎影在线在永久观看www| 久青青在线观看视频国产| 亚洲美女视频网| 欧美一级黄色片视频| 香蒸焦蕉伊在线| 在线观看日韩www视频免费| 欧美brazzers| 26uuu色噜噜精品一区| 99久久久精品免费观看国产蜜| 国产精品爱久久久久久久小说| 国产精品色一区二区三区| 欧美一区二区不卡视频| 黄色的电影在线-骚虎影院-骚虎视频| 欧美国产精品一区二区| 日本黄色免费视频| 黑人一区二区| www.亚洲自拍| 国产97在线 | 亚洲| 日本中文字幕高清| 激情亚洲色图| 26uuu国产电影一区二区| 91国在线视频| www.蜜臀av| 97免费高清电视剧观看| 日韩一区欧美二区| 国产精品免费一区二区三区都可以| 天堂在线视频| 欧美中文字幕一区二区| 亚洲欧美国产精品专区久久| japanese日本护士撒尿| 欧美精品做受xxx性少妇| 国产免费av观看| h片在线观看免费| 狠狠狠狠狠狠狠| 久久综合久久久久| 欧美成人精品三级在线观看| 中文字幕在线中文字幕日亚韩一区| 欧美人一级淫片a免费播放| 777久久久精品| 欧美久久久久久久久久| 亚洲最大激情中文字幕| 国产一区二区三区高清在线观看| 日本精品一区二区三区高清| 性欧美丰满熟妇xxxx性仙踪林| 香蕉97视频观看在线观看| 精品在线观看入口| 黄色一级片免费的| 久久资源综合| 亚洲人辣妹窥探嘘嘘| 中文字幕激情视频| 欧美日韩大陆一区二区| 国产免费久久| 亚洲va欧美va国产综合久久| 免费成人动漫| 国产日韩综合一区二区性色av| 99综合视频| 麻豆传媒在线看| 欧美日韩久久不卡| 国产精品入口麻豆电影| 国产欧美日韩伦理| 精品手机在线视频| 欧美亚男人的天堂| 一区二区视频| 麻豆视频国产| 婷婷丁香激情网| 亚洲美女一区二区三区| 超碰97久久| 欧洲亚洲免费视频| bl在线肉h视频大尺度| 美女一区二区三区视频| 国产极品在线播放| 女同性αv亚洲女同志| 青青草国产精品视频| 97人摸人人澡人人人超一碰| 在线看的片片片免费| 久久久久久亚洲精品| 欧美午夜久久久| 亚洲国产精品大全| 国产色视频一区二区三区qq号| 影音先锋中文在线播放| 成人免费在线观看av| sm久久捆绑调教精品一区| 一区二区三区四区在线免费视频| 欧美又大又硬又粗bbbbb| 国内精品美女在线观看| 国产精品久久久久久久久久久久| 激情欧美成人久久综合小说| 在线播放一区二区精品产| 一级特黄大欧美久久久| www.日韩不卡电影av| 国产美女在线播放| 国产欧美久久久久| 国产精品爱啪在线线免费观看| a4yy在线播放免费观看视频| 日韩一级中文字幕| 中文字幕av无码一区二区三区| 黄色动漫在线| 国产精品一区二区人妻喷水| 污污污污污污www网站免费| 激情小说激情视频| 午夜影院在线| 免费在线性爱视频| 在线免费观看视频黄| 国产女人18毛片18精品| 人成在线免费网站| 黑人巨大猛交丰满少妇| 韩国一级黄色录像| 青青草97国产精品免费观看无弹窗版| 2018亚洲男人天堂| **三级三级97片毛片| 91精品国产乱码久久久久久久| 麻豆av福利av久久av| 亚洲精品国产拍免费91在线| 成人国产在线观看| 亚洲一卡二卡三卡四卡| 免费在线观看视频一区| 乱亲女h秽乱长久久久| 亚洲人妻一区二区| 色婷婷香蕉在线一区二区| 中文字幕乱码人妻二区三区| 日韩在线观看成人| 成人毛片100部免费看| 国风产精品一区二区| 成人网在线免费观看| 日本精品一二三| 国产真实乱子伦| 日韩精品一区二区三区免费观看| 福利视频一区二区三区| 久久这里只有精品23| 天天干天天做天天操| 国产不卡精品视男人的天堂| 日本成人一区| 视频一区二区三区四区五区| 国产精品专区h在线观看| 国产九色精品成人porny| 欧美日韩大片在线观看| 亚洲国产精品无码久久久久高潮| 人人妻人人澡人人爽人人欧美一区| 精品不卡视频| 四虎影视4hu4虎成人| 欧美日韩一区二区三区视频播放| www 四虎| 不卡的av中文字幕| 国产精品嫩草影院精东| 国产一级一片免费播放放a| 一区二区视频免费完整版观看| 在线观看国产高清视频| 亚洲一区二区三区三州| 精品国产一区二区三区小蝌蚪| 天天影视天天精品| 欧美日韩小视频| 先锋男人资源站| 99热这里只有成人精品国产| 91看片在线| 国产男女无套免费网站| 污污网址在线观看| av午夜一区麻豆| 免费在线观看精品| 日韩亚洲国产中文字幕| seerx性欧美巨大| 亚洲自拍第三页| 99久久久成人国产精品| 欧美少妇精品| 欧美在线观看一区二区三区| 国产精品一区=区| 国产精品av久久久久久麻豆网| 91精品在线观看视频| 久久久久久久久免费视频| av高清不卡| 精品一区二区三区香蕉蜜桃| 美国黑人一级大黄| 中国成人一区| 91这里只有精品| 美女激情福利视频在线观看| 欧美精品福利在线| 久久精品一区二区三区不卡牛牛| 四色永久免费网站| 在线观看日本中文字幕| 欧美日韩国产免费观看视频| 尤物影院在线播放| 亚洲天堂一区在线| 久久亚洲成人av| 超碰在线一区| av一级在线| jizz在线免费观看| 国产奶水涨喷在线播放| 国产免费黄色网址|