有结构(类型)和函数,允许通过共享内存(shm_open 和 mmap)使用结构返回 Type*。

Type* type = openSharedMemory();  

如果共享内存为空并且语句typeptr == nullptr,我想制作内容在不创建但打开SharedMemory内存的过程中应该返回true。 可能吗?

请您参考如下方法:

这不是指针的工作原理。

如果您将指针设置为空,则内存仍会保留在那里,直到有人更改它为止。即使内存中存在 0,这也可能仅表示整数 0。对于 C++ 中的普通指针来说是这样,对于共享内存也是如此。

你需要做的就是让内存“无效”。 C++ 中没有执行此操作的标准,因此必须由您自己定义。

这里有多种选择。

<小时 />

一种是给自己定义一个无效的值,并将数据设置为这个值。

例如如果您有一个 int 但您知道您只在其中存储正数,您可以将其设置为 -1 以标记为无效(或最大/最小 int,我想您明白了)。

然后你检查它而不是指针

//in some header 
static const int INVALID_VALUE = -1; 
 
//some process 
type->shared_int = INVALID_VALUE; 
 
//somewhere else 
if(type->shared_int != INVALID_VALUE) //or whatever 
    //do stuff 
<小时 />

如果你的内存中有一个自定义结构,你可以添加一个 bool 标志,无论它是否有效

struct Type 
{ 
    bool valid = true; //c++11 initialize to true 
    //other data members 
}; 

当您现在想要将内存标记为无效时,只需将成员设置为 false 并检查即可。

//some process 
type->valid = false; 
 
//somewhere else 
if(type->valid) 
    //do stuff 
<小时 />

如果您在使用普通指针时拥有明确的对象所有权,则可以避免这些事情。

在进程间通信中,这可能会变得有点复杂,因此您必须使用这样的机制。

从设计角度来看,最好有一个进程负责内存(分配和释放),并确保其他进程已完成,或者在“删除”内存时停止需要访问内存。但这并不总是可能的。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!