3

在 C/C++ 和 W32 api 中创建一个带有线程的 Windows 应用程序是我的意图。还有一个带有线程的java应用程序。

它们都有一组给定的信号量。

一个应用程序可以与另一个应用程序的信号量一起使用吗?

4

4 回答 4

4

Java 线程不一定对应于 Win32 线程,Java 信号量也不一定与 Win32 信号量相同(例如不能命名)。可以使用 JNI 来实现线程库,但可能比它的价值更麻烦,特别是因为它不能很好地与 JVM 线程配合使用。它也将完全不可移植。

根据您实际尝试完成的任务,可能会更好地研究诸如 CORBA 或 RPC 之类的东西。

于 2013-04-02T18:57:31.883 回答
1

在围绕信号量构建整个应用程序系统(与更传统的 IPC 方式相反)之前,请考虑这一点。

与互斥锁不同,信号量没有线程所有权。只有系统的分布式和非持久性逻辑才能判断哪个进程在给定时间点“拥有”信号量的特定部分。这意味着如果其中一个应用程序突然终止(例如,由于缺陷而引用未分配的内存),则该缺陷将级联为整个系统的死锁或不当行为。因为无辜的应用程序会被冻结,而有问题的应用程序会消失,所以无论何时发生这种情况,您都可能很难追查根本原因。

如果您只需要一些短代码块的互斥,请考虑 Win32 命名互斥锁、数据库表或基于文件系统的锁,作为信号量的更易于管理的替代品(在您的情况下允许其中任何一种)。

于 2013-04-04T06:52:25.550 回答
1

是的,WIN32 确实有多进程信号量,但您可能需要创建一个 JNI 包装器才能从 Java 端使用它们。

在http://msdn.microsoft.com/en-us/library/ms682438%28v=VS.85%29.aspx的“备注”部分中查找以“多个进程”开头的段落。

于 2013-04-02T18:57:39.270 回答
0

不,线程与所属的进程有关。如果您计划同步两个应用程序,您需要使用一些 IPC(进程间通信)机制

于 2013-04-02T18:41:26.853 回答