SRW锁定在共享内存中

时间:2016-05-24 09:29:26

标签: c++ winapi

当放置在共享内存中时,可以在进程之间使用SRW Locks吗?

他们的内存占用似乎只是一个指针,但我无法找到锁定后背景中实际发生的事情的文档。

如果可能的话,我想避免内核互斥,但它开始看起来像我正在进入未定义的行为域。

2 个答案:

答案 0 :(得分:5)

无法在进程之间共享SRW锁。在文件的开头句中有点遗漏暗示了这一点

  

超薄读取器/写入器(SRW)锁使单个进程的线程能够访问共享资源...

这些对象利用了它们在单个进程中使用的事实。例如,以链表的形式跟踪等待进入锁的线程。这个等待线程列表显然必须在SRWLock之外保持某处,因为SRWLock只是单个指针的大小,并且你不能在其中放入10个线程的列表。单指针。该链接列表不会被其他进程访问。

答案 1 :(得分:0)

SRW是一个用户对象(就像关键部分一样),而不是内核对象。它们不能在进程之间共享。他们没有名字。

SRW是为了提高性能而实现的 - 它们比关键部分更快(并且明显比互斥体更快)。它们不允许递归锁定(CS和互斥锁允许)。

因为它是为了速度和性能而实现的 - 它们仅针对相同的进程访问而设计。在共享内存上放置SRW句柄不会使可用以便其他进程开始使用它。 SRW只是内部实现的不透明句柄。当句柄由进程映射时,它进入相同的进程边界 - 不能被其他进程共享。由于它们不是内核对象,因此也无法进行句柄继承。