在Mac OS X或Linux上是否有semaphore_broadcast或semaphore_signal_all功能

时间:2015-10-06 18:19:20

标签: c++ linux macos semaphore

我有一个基于客户端 - 服务器模型的问题,其中有一个服务器进程和多个客户端进程,客户端进程处于等待状态,等待服务器发出信号。

当服务器发出信号时,客户端会执行所需的处理并返回等待状态 问题是我需要一种方法,我可以通知所有出现的客户端(注册服务器的通知),即唤醒等待信号的所有客户端进程,而不仅仅是其中一个。

我之前使用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 */ } } 使用我们可以达到预期的效果)

0 个答案:

没有答案