Winapi Pthread win32 Librarray,不支持Pthread_进程_共享

Winapi Pthread win32 Librarray,不支持Pthread_进程_共享,winapi,pthreads,posix,mqueue,pthreads-win32,Winapi,Pthreads,Posix,Mqueue,Pthreads Win32,我正在使用pthread win32库来实现MQUE。 但当它运行到下面的代码时,抛出#40错误应该是ENOSYS,这意味着系统不受支持 pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED); i = pthread_mutex_init(&mqhdr->mqh_lock, &mattr); pthread_mutexattr_destroy(&mattr); /* be sure

我正在使用pthread win32库来实现MQUE。 但当它运行到下面的代码时,抛出#40错误应该是ENOSYS,这意味着系统不受支持

pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
i = pthread_mutex_init(&mqhdr->mqh_lock, &mattr);
pthread_mutexattr_destroy(&mattr);      /* be sure to destroy */
出了问题后我已经40岁了。有人知道这件事吗?或者您是否有其他替代解决方案,例如使用何种WIN32线程函数来替换它

注意:如果有人在win32中成功实现MQUE?
谢谢

您需要在Windows上阅读

对于Windows中的进程间互斥,您可以选择使用共享内存和(旋转然后睡眠或监视)实现自己的互斥

或者更容易编程,但性能不如使用操作系统提供的命名对象。它们的性能比在进程的线程内使用差大约10倍


在我自己从LinuxPthreads移植的生产代码中,我使用了第一个解决方案,但最终使用互斥解决方案发布了代码。它更可靠,而且我确信它在任何情况下都能工作。

我不知道您是否对在Win32 PThread库中进行黑客攻击感到满意,但是,尽管无法实现完整的PThread\u进程\u共享行为,可以使用API将内核对象的句柄复制到其他进程中,因此应该可以添加一些特定于windows的扩展(在unix版本中编译)允许进程之间共享互斥体。

•如果启用了CreateMutex继承的LPMutextAttributes参数,则由CreateProcess函数创建的子进程可以继承互斥体对象的句柄。此机制适用于命名互斥体和未命名互斥体

•进程可以在调用DuplicateHandle函数时指定互斥对象的句柄,以创建可供另一进程使用的重复句柄。此机制适用于命名互斥体和未命名互斥体


•进程可以在调用OpenMutex或CreateMutex函数时指定指定的互斥体,以检索互斥体对象的句柄。

我识别出您正在使用的代码…只需注释代码中的两行即可

pthread_mutexattr_setpshared(&mattr, PTHREAD_PROCESS_SHARED);
pthread_condattr_setpshared(&cattr, PTHREAD_PROCESS_SHARED);
…它可以作为进程内消息队列使用…除非您需要跨进程使用它。

我相信是这样

不幸的是,他的测试代码是一个单独的进程,所以它不在乎是否设置了PTHREAD_process_SHARED标志,因为pthreads-32从来都不支持它。当他在2000年构建它时,我打赌pthreads甚至没有抛出错误,所以他的测试代码运行良好

不幸的是,对我们所有人来说,似乎是他,所以他不会完成他的作品

我已经拿起火炬,重新编写了互斥体/信号处理,以使用本机windows互斥体和事件。请在此处查找代码: