Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can Java和C/C++;应用程序共享信号量?_Java_C++_C_Multithreading - Fatal编程技术网

Can Java和C/C++;应用程序共享信号量?

Can Java和C/C++;应用程序共享信号量?,java,c++,c,multithreading,Java,C++,C,Multithreading,我的想法是用C/C++和W32 api创建一个带有线程的windows应用程序。 以及一个带有线程的java应用程序 它们都有一组给定的信号量 一个应用程序可以与另一个应用程序的信号量一起工作吗?不,线程与所属进程相关。如果计划同步这两个应用程序,则需要使用某些IPC(进程间通信)机制Java线程不一定对应于Win32线程,Java信号量也不一定与Win32信号量相同(例如,它们不能命名)。使用JNI实现线程库是可能的,但可能会带来更多麻烦,特别是因为它不能很好地与JVM线程配合使用。它也将是完

我的想法是用C/C++和W32 api创建一个带有线程的windows应用程序。 以及一个带有线程的java应用程序

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


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

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

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


根据您实际要完成的任务,最好研究CORBA或RPC之类的东西。

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


查找“.P/>>P”的“备注”部分中的“多进程”一节,然后再建立一个围绕信号量的整个应用系统(而不是更常规的IPC方式),考虑这一点。 与互斥量不同,信号量没有线程所有权。只有系统的分布式和非持久性逻辑才能判断在给定时间点哪个进程“拥有”信号量的特定部分。这意味着,如果其中一个应用程序突然终止(例如,由于缺陷而引用未分配的内存),该缺陷将级联为整个系统的死锁或错误行为。由于无辜的应用程序将被冻结,而有问题的应用程序将消失,因此每当发生这种情况时,您可能很难找到根本原因


如果您只需要互斥一些短代码块,考虑Win32命名的互斥体、数据库表或基于文件系统的锁,更容易管理信号量的替代品(在您的情况下允许它们中的任何一个)。从C和C++中,这很容易,很可能从java变得更困难(例如,您可能需要使用JNI,虽然我不确定)。在Win32中,信号灯是IPC的一种形式,只要它们被命名。