【问题标题】:C programs synchronizationC程序同步
【发布时间】:2015-05-16 20:39:09
【问题描述】:

我正在尝试在 Windows 中使用 POSIX 并使用信号量来同步 C 和 C++ 程序。既然我们正在谈论单独的程序,这甚至可能吗?还是信号量仅用于在同一程序的 C/C++ 文件中同步?

【问题讨论】:

  • 我会尝试使用一个库,比如 boost 来帮助找出 Windows 的共享内存和锁。看看这个 - 他们讨论了一些我认为你正在寻找的东西boost.org/doc/libs/1_41_0/doc/html/interprocess/…
  • 在 linux(我怀疑是 windows)中,一个“命名信号量”(用于在不同进程之间进行通信的那种)实际上是 /proc 文件系统下的一个文件。 “命名信号量”非常适合不同可执行文件之间的同步。

标签: c++ c


【解决方案1】:

不同程序之间的通信,需要使用命名信号量。 在 POSIX 线程中,获取信号量的正确方法是:sem_open 只需给信号量起一个名字,在需要通信的程序中使用相同的名字即可。

有关如何执行此操作的更多详细信息,请参阅此答案: How to share semaphores between processes using shared memory

【讨论】:

  • 不是 sem_wait 和 sem_post 像这里:stackoverflow.com/questions/15182328?
  • 您使用 sem_open 创建或打开共享信号量。然后你使用 sem_post 和 sem_wait 来使用信号量(分别释放和获取)。
  • 是的,我知道这适用于 POSIX,但由于我只能使用 WIndows 信号量,Windows 中 sem_wait 和 sem_post 的等效命令是什么?
  • 您有 2 个解决方案:要么在 Win32 中使用 pthreads(POSIX 线程),要么使用 Win32 API。第一种情况,可以使用mingw w64编译器套件,然后使用sem_open、sem_post、sem_wait、sem_close。在第二种情况下,您可以使用以下方法: CreateSemaphore/CreateSemaphoreEx/OpenSemaphore/ReleaseSemaphore/WairForSingleObject/WaitFor... 既然您说要使用 POSIX,第一种解决方案似乎很自然。
  • 实际上我必须同步两个进程,特别是第一个进程的 for 循环与第二个进程的 for 循环,那么代码在您提供的 Windows 命令中会是什么样子?
【解决方案2】:

信号量是进程间通信工具中的成员。它们可以原生地在 C 或 C++ 中用于同步不同的程序。

【讨论】:

    【解决方案3】:

    对于独立进程之间的同步,需要使用信号量。

    请参阅以下内容: Semaphores

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2011-06-15
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多