2013-04-02 37 views
3

这是我的决心创建一个Windows应用程序与线程在C/C + +和W32 api。 和一个带有线程的java应用程序。Java和C/C++应用程序可以共享信号量吗?

他们都会有一套给定的信号量。

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

+1

是的,如果你在两个程序中使用命名的Win32信号量。这对于C和C++来说非常简单,从Java很可能更困难(例如,您可能需要使用JNI,尽管我不确定)。 –

回答

0

不,线程与属于的进程有关。如果您打算同步这两个应用程序,则需要使用某些IPC(进程间通信)机制

+3

在Win32中,信号量是IPC的一种形式,只要它们被命名。 – Joel

3

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

根据你真正想要完成的事情,或许会更好地研究像CORBA或RPCs这样的东西。

0

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

与互斥锁不同,信号量不具有线程所有权。只有系统的分布式和非持久性逻辑可以告诉哪个进程在给定的时间点“拥有”了信号量的特定部分。这意味着如果其中一个应用程序突然终止(例如,由于缺陷导致未分配内存),则该缺陷将级联为整个系统的死锁或不良行为。因为无辜的应用程序会出现冻结,并且违规的应用程序不见了,所以只要发生这种情况,您可能很难追查根本原因。如果您只需要互相排除一些简短的代码块,就可以将Win32命名为mutexes,数据库表或基于文件系统的锁作为易于管理的信号量替代品(在您的情况下允许其中任何一种) )。

相关问题