进程之间通信的几种方式
前言
这个问题面试官必问的好吧,这是非常经典的问题,正好之前的项目中有这样的经历,所以就咱们的项目出发,讲一下进程之间通信的几种方式。
shared memory
共享内存,大家读写双方约定一块内存地址,然后咱们分别读写这块地址的数据(当然,大家也要一起约定好数据的格式)。记得加锁哦。
咱们看一下shared memory的写和读是咋搞的:
//1.没有锁的话,创建锁,然后尝试获取锁
HANDLE Gmutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, TEXT("MutexForSharedMemory"));
if (Gmutex == NULL)
{
Gmutex = CreateMutex(NULL, FALSE, TEXT("MutexForSharedMemory"));
}
WaitForSingleObject(Gmutex, INFINITE); //等待获取Gmutex,不然就一直卡死在这里,时间是infinite
//创建共享内存区域
SECURITY_ATTRIBUTES ScrtyAttr = {
0 };
ScrtyAttr.bInheritHandle = FALSE;
ScrtyAttr.lpSecurityDescriptor = NULL;
ScrtyAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
HANDLE GSharedMem = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,