C++ Mac OS X或linux上是否有信号灯广播或信号灯信号灯所有功能
我有一个基于客户机-服务器模型的问题,其中有一个服务器进程和多个客户机进程,客户机进程处于等待状态,等待服务器发出信号 当服务器发出信号时,客户端执行所需的处理并返回等待 问题是,我需要一种方法来通知所有出现的客户端(注册服务器通知),即唤醒所有等待信号的客户端进程,而不仅仅是其中一个 我之前在MacOSX上使用了C++ Mac OS X或linux上是否有信号灯广播或信号灯信号灯所有功能,c++,linux,macos,semaphore,C++,Linux,Macos,Semaphore,我有一个基于客户机-服务器模型的问题,其中有一个服务器进程和多个客户机进程,客户机进程处于等待状态,等待服务器发出信号 当服务器发出信号时,客户端执行所需的处理并返回等待 问题是,我需要一种方法来通知所有出现的客户端(注册服务器通知),即唤醒所有等待信号的客户端进程,而不仅仅是其中一个 我之前在MacOSX上使用了mach_信号量来解决这个问题 因此,我的代码使用了由公开的semaphore\u signal\u all() 我试图寻找一种解决方法,发现bootstrap\u check\u i
mach_信号量来解决这个问题
因此,我的代码使用了由公开的semaphore\u signal\u all()
我试图寻找一种解决方法,发现bootstrap\u check\u in()
可能是一种方法,但进一步挖掘发现,这需要一个APIbootstrap\u create\u service()
,它也不推荐使用
简而言之,问题是我找不到任何IPC机制(与信号量或其他相关),使用它我可以唤醒所有等待信号的客户端进程
下面是一些代码片段,它们可以更好地表达这个问题:
SERVER.cpp
void server()
{
signal_all_clients_using_semaphore();
/*
do some processing
*/
signal_all_clients_using_semaphore();
/* and so on */
}
CLIENT.cpp
void client()
{
RegisterForTheNotificationFromServer(); // internally looks up for the semaphore created by the server
while(1)
{
semaphore_wait(INFINTE_TIME);
/* do some small processing */
}
}
不用说,有多个客户端实例,只有一个服务器实例在运行
如果您可以提供一些代码片段来支持您的答案,这将非常有用。此外,您的答案不需要特定于mac,也可以针对linux(但不适用于windows,因为我们已经有手动重设事件-CreateEvent/SetEvent API
,使用它们我们可以实现所需的结果)REDIS或ZeroMQ pub/sub?Posix条件变量(和互斥量)可以跨进程使用。因此,在您的例子中,请看一下pthread\u cond
函数系列。例如,它与你有关。请确保cond变量可在进程之间共享,并查看boost interprocess。@kaylum感谢您提供的信息。通过信号灯不断接近这一点。但当我迁移到pthread_*时,一切似乎都在linux上正常工作。但是,当我在MAC OS X
上使用相同的系统调用序列时,我只能将信号广播到一个进程,就像我将第二个客户端连接到保存互斥体和cond var的共享内存并调用pthread_cond_wait()
时一样,此调用无法返回22。