欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++共享內(nèi)存刪除的陷阱

 更新時(shí)間:2022年01月06日 10:56:06   作者:CPP開(kāi)發(fā)前沿  
這篇文章主要介紹了C++共享內(nèi)存刪除的陷阱講解,當(dāng)進(jìn)程結(jié)束使用共享內(nèi)存區(qū)時(shí),要通過(guò)函數(shù) shmdt 斷開(kāi)與共享內(nèi)存區(qū)的連接。下面來(lái)看看具體問(wèn)題都是怎么解決的吧

文章轉(zhuǎn)自微信公眾號(hào):CPP開(kāi)發(fā)前沿

當(dāng)進(jìn)程結(jié)束使用共享內(nèi)存區(qū)時(shí),要通過(guò)函數(shù) shmdt 斷開(kāi)與共享內(nèi)存區(qū)的連接。該函數(shù)聲明在 sys/shm.h 中,其原型如下:
 

int shmdt(const void *shmaddr);

參數(shù) shmaddr 是 shmat 函數(shù)的返回值。

進(jìn)程脫離共享內(nèi)存區(qū)后,數(shù)據(jù)結(jié)構(gòu) shmid_ds 中的 shm_nattch 就會(huì)減 1 。但是共享段內(nèi)存依然存在,只有 shm_attch 為 0 后,即沒(méi)有任何進(jìn)程再使用該共享內(nèi)存區(qū),共享內(nèi)存區(qū)才在內(nèi)核中被刪除。一般來(lái)說(shuō),當(dāng)一個(gè)進(jìn)程終止時(shí),它所附加的共享內(nèi)存區(qū)都會(huì)自動(dòng)脫離。
我們通過(guò):
 

int shmctl( int shmid , int cmd , struct shmid_ds *buf );

來(lái)刪除已經(jīng)存在的共享內(nèi)存:

  • 第一個(gè)參數(shù),shmid,是由shmget所返回的標(biāo)記符。
  • 第二個(gè)參數(shù),cmd,是要執(zhí)行的動(dòng)作。他可以有三個(gè)值:

命令 描述:

  • IPC_STAT 設(shè)置shmid_ds結(jié)構(gòu)中的數(shù)據(jù)反射與共享內(nèi)存相關(guān)聯(lián)的值。
  • IPC_SET 如果進(jìn)程有相應(yīng)的權(quán)限,將與共享內(nèi)存相關(guān)聯(lián)的值設(shè)置為shmid_ds數(shù)據(jù)結(jié)構(gòu)中所提供的值。
  • IPC_RMID 刪除共享內(nèi)存段。
  • 第三個(gè)參數(shù),buf,是一個(gè)指向包含共享內(nèi)存模式與權(quán)限的結(jié)構(gòu)的指針,刪除的時(shí)候可以默認(rèn)為0。

如果共享內(nèi)存已經(jīng)與所有訪問(wèn)它的進(jìn)程斷開(kāi)了連接,則調(diào)用IPC_RMID子命令后,系統(tǒng)將立即刪除共享內(nèi)存的標(biāo)識(shí)符,并刪除該共享內(nèi)存區(qū),以及所有相關(guān)的數(shù)據(jù)結(jié)構(gòu);

如果仍有別的進(jìn)程與該共享內(nèi)存保持連接,則調(diào)用IPC_RMID子命令后,該共享內(nèi)存并不會(huì)被立即從系統(tǒng)中刪除,而是被設(shè)置為IPC_PRIVATE狀態(tài),并被標(biāo)記為”已被刪除”(使用ipcs命令可以看到dest字段);直到已有連接全部斷開(kāi),該共享內(nèi)存才會(huì)最終從系統(tǒng)中消失。

需要說(shuō)明的是:一旦通過(guò)shmctl對(duì)共享內(nèi)存進(jìn)行了刪除操作,則該共享內(nèi)存將不能再接受任何新的連接,即使它依然存在于系統(tǒng)中!所以,可以確知, 在對(duì)共享內(nèi)存刪除之后不可能再有新的連接,則執(zhí)行刪除操作是安全的;否則,在刪除操作之后如仍有新的連接發(fā)生,則這些連接都將可能失??!

Shmdt和shmctl的區(qū)別:

hmdt 是將共享內(nèi)存從進(jìn)程空間detach出來(lái),使進(jìn)程中的shmid無(wú)效化,不可以使用。但是保留空間。
shmctl(sid,IPC_RMID,0)則是刪除共享內(nèi)存,徹底不可用,釋放空間。

到此這篇關(guān)于C++共享內(nèi)存刪除的陷阱的文章就介紹到這了,更多相關(guān)共享內(nèi)存刪除的陷阱內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Qt實(shí)現(xiàn)線程與定時(shí)器的方法

    Qt實(shí)現(xiàn)線程與定時(shí)器的方法

    本文主要介紹了Qt實(shí)現(xiàn)線程與定時(shí)器的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++ move()函數(shù)案例詳解

    C++ move()函數(shù)案例詳解

    這篇文章主要介紹了C++ move()函數(shù)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng)

    C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)員工工資管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • C語(yǔ)言深入探索遞歸的特點(diǎn)

    C語(yǔ)言深入探索遞歸的特點(diǎn)

    程序調(diào)???的編程技巧稱為遞歸 recursion)函數(shù)??調(diào)???就是遞歸,你也可以理解成是?種嵌套結(jié)構(gòu),但遞歸分為倆部分,第?是“遞”,進(jìn)?嵌套結(jié)構(gòu)。第?是”歸“,最終會(huì)?步?步返回。第?次接觸遞歸都會(huì)很懵,慢慢理解這個(gè)過(guò)程就明?了
    2022-06-06
  • C++文件的操作及小實(shí)驗(yàn)示例代碼詳解

    C++文件的操作及小實(shí)驗(yàn)示例代碼詳解

    這篇文章主要介紹了C++文件的操作及小實(shí)驗(yàn),對(duì)于文件,它是一個(gè)流對(duì)象,對(duì)文件的操作無(wú)非是讀和寫(xiě),通過(guò)本文的學(xué)習(xí)大家將會(huì)理解文件的具體操作
    2022-05-05
  • 深入理解C++中的文件操作

    深入理解C++中的文件操作

    這篇文章主要給大家深入的介紹了C++中的文件操作,文件的操作對(duì)每個(gè)程序員來(lái)說(shuō)都是很重要的,本文的介紹的很詳細(xì),有需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-01-01
  • C語(yǔ)言實(shí)現(xiàn)消消樂(lè)小游戲

    C語(yǔ)言實(shí)現(xiàn)消消樂(lè)小游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)消消樂(lè)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • C++實(shí)現(xiàn)紅黑樹(shù)核心插入實(shí)例代碼

    C++實(shí)現(xiàn)紅黑樹(shù)核心插入實(shí)例代碼

    紅黑樹(shù)是一種二叉搜索樹(shù),但在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色,可以是Red或Black,下面這篇文章主要給大家介紹了關(guān)于C++實(shí)現(xiàn)紅黑樹(shù)核心插入的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • C++?typedef常見(jiàn)用法詳解

    C++?typedef常見(jiàn)用法詳解

    這篇文章主要介紹了C++?typedef用法詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的概念及滿二叉樹(shù)與完全二叉樹(shù)

    C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)系列篇二叉樹(shù)的概念及滿二叉樹(shù)與完全二叉樹(shù)

    在上一章中我們正式開(kāi)啟了對(duì)數(shù)據(jù)結(jié)構(gòu)中樹(shù)的講解,介紹了樹(shù)的基礎(chǔ)。本章我們將學(xué)習(xí)二叉樹(shù)的概念,介紹滿二叉樹(shù)和完全二叉樹(shù)的定義,并對(duì)二叉樹(shù)的基本性質(zhì)進(jìn)行一個(gè)簡(jiǎn)單的介紹。本章附帶課后練習(xí)
    2022-02-02

最新評(píng)論