我有一个基于客户端 - 服务器模型的问题,其中有一个服务器进程和多个客户端进程,客户端进程处于等待状态,等待服务器发出信号。
当服务器发出信号时,客户端会执行所需的处理并返回等待状态 问题是我需要一种方法,我可以通知所有出现的客户端(注册服务器的通知),即唤醒等待信号的所有客户端进程,而不仅仅是其中一个。
我之前使用history|grep something
在Mac OS X上解决了这个问题。
因此,我的代码使用mach_semaphore公开的mach_semaphore
API,但我正在使用semaphore_signal_all()
调用来实现此目的,但此系统调用已被弃用所以不再有用。
我试图寻找一种解决方法,并发现here可能是bootstrap_register()
可行的方法,但是进一步挖掘发现这需要一个也被弃用的API bootstrap_check_in()
。< / p>
简而言之,问题是我无法找到任何IPC机制(与信号量或其他相关),我可以使用它来唤醒所有等待信号的客户端进程。
以下是一些可以更好地传达问题的代码片段:
bootstrap_create_service()
不用说,有多个客户端实例,只有一个服务器实例正在运行。
如果您能提供一些代码片段来支持您的答案,那将非常有用。此外,您的答案不一定是特定于mac的,也可以是 linux (但不是因为我们已经有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 */
}
}
使用我们可以达到预期的效果)