C++ Mac OS X或linux上是否有信号灯广播或信号灯信号灯所有功能

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

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

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

我之前在MacOSX上使用了
mach_信号量来解决这个问题

因此,我的代码使用了由公开的
semaphore\u signal\u all()

我试图寻找一种解决方法,发现
bootstrap\u check\u in()
可能是一种方法,但进一步挖掘发现,这需要一个API
bootstrap\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。