windows 共享内存加锁

请问那位知道当时创建共享内存后有多个进程频繁访问同一块内存时需要加锁吗?
如果需要加锁,使用那个方法比较合适。

0

3个回答

加锁和访问频繁不频繁没有关系,主要是看是否有数据同步和事务性的需要。如果你有读-修改-写回的并发操作,无论是否频繁,都要加锁。如果读取后不需要修改,而且没有实时的需要,则不需要加锁。

2
caozhy
贵阳挖掘机马善福,自备车辆专业挖游泳池 回复chen_zxpro: 各有各的利弊。要给出使用场景和代码才好判断。
2 年多之前 回复
chen_zxpro
chen_zxpro 也会有一部分数据需要加锁,那么使用哪种锁会更好一点啊?CreateMutex互斥锁命名还是使用其他的效果更好一些
2 年多之前 回复

如果只是进程内使用的话可以用EnterCriticalSection,这个比CreateMutex效率高点。

0
-2
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
共享内存加锁互斥访问
在做项目时遇到需要用到多个进程对共享内存读写,考虑到数据冲突问题,特加上互斥作为访问约束条件,具体代码如下: HANDLE CreateOpenFileMapping(LPCTSTR lpShareMemName) { //打开共享的文件对象。  HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,lpShareMemN
windowsC++多线程加锁信号量共享内存
windowsC++多线程加锁信号量共享内存
Windows下共享内存
Windows下共享内存
windows加锁类
windows加锁类,多线程编程需要用到,封装的挺好
windows进程共享内存技术
API: 引入系统API Memery Read: 共享内存读取 Memery Write: 共享内存写入
WINDOWS 共享内存 源码
WINDOWS 共享内存 源码,采用两个界面来做实验,初学者很有用。
windows下创建共享内存
用CreateFileMapping创建rn在网上看到说共享内存块的名字要加"Global\\",否则会使共享的内存只能在当前用户下被另一个或多个进程访问。rn可是我在创建共享内存如下rn[img=https://img-bbs.csdn.net/upload/201503/17/1426557619_326742.png][/img]rn创建失败,返回的句柄为NULLrnrn然后我改成这样rn[img=https://img-bbs.csdn.net/upload/201503/17/1426557677_647980.png][/img]rn初次调试成功了,然后我给使用者用,在他们机器上调试,又返回NULL了。rnrn有没有可能是电脑系统的问题还是什么原因?名字究竟是该取"Global\\share"还是"Global\\\\share" rn会是什么情况创建失败?
Windows进程通信--共享内存(二)
一、问题: 上篇文章留下了一些问题,这次主要解决以下两个问题: 1.往共享内存写数据时,并不确认共享内存里面的数据是否已经被处理过了 2.发送数据大小大于共享内存大小时,会存在数据丢失问题 二、实现方式: 1.增加一个读事件,如果共享内存里面的数据被消费调了,则发送该事件 2.增加发送数据的长度,当读取到的总数据长度等于发送的长度时,调用数据处理函数 三、代码 Shar...
c++ windows下创建共享内存
用CreateFileMapping创建n在网上看到说共享内存块的名字要加"Global\\",否则会使共享的内存只能在当前用户下被另一个或多个进程访问。n可是我在创建共享内存如下n![图片说明](https://img-ask.csdn.net/upload/201503/17/1426559532_434974.png)n创建失败,返回的句柄为NULLnn然后我改成这样n![图片说明](https://img-ask.csdn.net/upload/201503/17/1426559500_79713.png)n初次调试成功了,然后我给使用者用,在他们机器上调试,又返回NULL了。nn有没有可能是电脑系统的问题还是什么原因?名字究竟是该取"Global\\share"还是"Global\\\\share" n会是什么情况创建失败?
Windows进程间通信之共享内存
共享内存方式实现进程间通信。详细看我的博客:http://blog.csdn.net/pengguokan/article/details/8921346
Windows共享内存解析
在Windows程序开发过程中,当多个进程之间需要使用同样的数据的时候我们最好的方式就是通过共享内存进行处理(比如:当A进程运行时,进行数据处理,那么此时我想知道数据是不是正确,用B监控,那么A与B之间就可以使用共享内存的方式,并且这时来个C进程,他也可以访问这块共享内存数据进行监控)。 1.共享内存的原理 如图所示,尽管进程A和进程B在Windows下有两个相互独立的逻辑地址,但是在数据上
简单windows共享内存封装类
简单windows共享内存封装类
windows共享内存读取
windows A、B两个进程用共享内存通信,A启用一个线程从共享内存读数据,如何做到A将线程挂起,直到B往里面写了数据才从共享内存里面读数据。rn即如何判断有人往共享内存里面写入的东西呢。rn
Windows进程通信——共享内存
1. 概述 Win32 API中共享内存(Shared Memory)实际就是文件映射的一种特殊情况。进程在创建文件映射对象时用0xFFFFFFFF来代替文件句柄(HANDLE),就表示了对应的文件映射对象是从操作系统页面文件访问内存,其它进程打开该文件映射对象就可以访问该内存块。由于共享内存是用文件映射实现的,所以它也有较好的安全性,也只能运行于同一计算机上的进程之间。 2. 编码 2
Windows进程通信之共享内存通信
本文章先介绍共享内存是啥,再介绍使用共享内存要涉及的4个函数,最后将实例代码附上,实例代码用于加深理解,读者也可以模仿用例改编使用。 1. 共享内存的简单介绍  共享内存就是允许两个不相关的进程访问同一个虚拟内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都...
windows下的共享内存类
共享内存的实现。编译环境:XP SP3, VS2005 SP1
Windows IPC 进程间通信之共享内存
1. 必须先创建共享内存,才能够打开 2. 关闭共享内存后,就无法打开 3. 使用Global则必须是管理员权限才能创建或打开 相当于要读写一个文件,必须先创建文件才能够打开,删掉文件后就无法打开。权限不够的话就无法读写 // share_memory.cpp : 定义控制台应用程序的入口点。 //
Windows进程间通信-共享内存
做项目时要用到进程间的通信,把服务程序和普通界面程序建立通信,记录一下用到的方法防止忘记 首先这里用的是共享内存的通信方式 共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信。因为是通过内存操作实现通信,因此是一种最高效的数据交换方法。 共享内存在 Windows 中是用 FileMapping 实现的,从具体的
Windows进程通信_共享内存
两个控制台,一个动态库,加载后AB共享内存,可在IO线程中收发消息。这只是一个简单的demo,使用IPC中data_seg。
windows使用共享内存实例
今天复习一下windows下进程间通讯的方法:共享内存,以下是简单实例客户端:#include <windows.h> #include <stdio.h> #pragma pack(1) struct ShareData { int iType; int iSize; char strData[4096]; }; #pragma pack() int main(...
Windows进程通信--共享内存(三)
基于前面的文章,这次对共享内存简单的封装一下,使得共享内存的使用更为容易。 为了代码的简单,这次封装的也都是同步的共享内存,如果需要支持异步的话,引入线程池(ShareMemory::writeData里面的功能放在线程里面来做)即可。也不是特别复杂。 代码如下: ShareMemoryHelper.h #ifndef SHAREMEMORYHELER_H #define SHAREME...
如何扩大windows共享内存
欲提高widows共享内存至3G以上,有啥可行的方案?rn64位系统?
windows多进程访问共享内存
如题。rn现在有一个写进程,N个读进程。要求如下:rn1、写进程往共享内存写数据的时候,读进程不能访问该共享内存rn2、当写进程写完数据后,N个读进程可以同时访问共享内存,但是写进程不能访问共享内存rn即:独占写,共享读。
RTX与Windows进程通信(互斥对象+共享内存)
本实例完成RTX与Windows进程通信,包含两个工程:1、Windows MFC 程序,创建共享内存,并可完成对共享内存的读写操作;2、RTX进程通过读共享内存完成通信。开发环境:MS VS2005。参考资料: RTX Help文档。推荐资料:博客http://wzhyblog.yo2.cn/articles/tag/rtx
windows中进程共享内存的方法
该文档介绍了在windows上进程间几种共享内存的方式
C++共享内存实现(windows和linux)
共享内存是一种进程间通信的方式,速度比较快 基本原理:以页面为单位,将一个普通文件映射到内存中,达到共享内存和节约内存的目的,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能 windows和linux都提供了原生的系统级的C++接口,可以将文件映射到内存 windows中使用CreateFileMapping linux使用mmap 代码示例 这里...
Windows系统服务与用户进程共享内存
通常使用CreateFileMapping的WINAPI函数可以创建共享内存,可以实现在不同进程中访问同一数据,实现通信等。但我们在其他实际编程中会遇到,服务和进程通信的情况,及系统服务与用户进程共同访问共享内存,如果仍然使用这个API,你会发现,在另一个程序中Open时,是无法返回正确的HANDLE的。以下这段代码也是来自 stackoverflow上的,我们以此展开学习const char* s
windows学习历程-IPC之共享内存
共享内存 一、共享内存含义:共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。 由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)。任何一个缓存的数据被更新后,由于其他处理器也 可能要存取,共享内存就需要立即更新,否则不同的处理器可能用到不同的数据。共享内存是 Unix下的多进程之间的通信方 法 ,这种
加锁
加锁定义 加锁其实就是实现保护一个线程不被其他线程所干扰它的执行 Linux 有几种加锁,什么情况下会加锁 spin_lock(忙等待的锁) mutex(互斥锁) rw_XXX(读写锁)等 不同的锁会在不同的情况下加上 比如互斥锁,同一时间内只有一个任务持有互斥锁,而且只有这个任务可以对互斥锁进行解锁,这样就防止了其他前程的干扰,只有这个线程解锁才能进入 自旋锁:自旋锁其实和互斥锁有点
高手进!!!c++关于对共享内存进行加锁的方法
最好来个例子的代码rn求指教
共享内存
我开了快共享内存。rnrn而后一进程在运行过程中malloc了几块内存。rn由共享内存中的的指针指到该位置。rnrn当该进成终止后。 malloc的内存是否会自动释放呢??
【共享内存】进程间通信--共享内存
转自:http://home.eeworld.com.cn/my/space-uid-138607-blogid-218893.html   ------fork()的说明在文章末尾        可以说,共享内存是一种最为高效的进程间通信方式,因为进程可以直接读写内存,不需要任何数据的复制。为了在多个进程间交换信息,内核专门留出了一块内存区,这段内存区可以由需要访问的进...
相关热词 c# 线程顺序 c#昨天当前时间 c# 多进程 锁 c#mysql图片存取 c# ocx 委托事件 c# 读取类的属性和值 c# out 使用限制 c#获取url的id c#怎么进行分页查询 c# update 集合