1

是否可以在链接到此代码的每个人之间共享一个“上帝”实例,以放置在共享对象中?

god* _god = NULL;
extern "C" 
{

int set_log_level(int level)
{
    if(_god == NULL) return -1;
    _stb->log_level(level);
    return 0;
}

int god_init(){
    if(_god == NULL){
        _god = new god(); //Magic happens here
    }
}

}

假设我在每个函数的开头都进行了锁同步,并且考虑到上帝本身可以 new/malloc 其他东西,但那些东西永远不会自己返回给调用者(上帝 malloc 仅供内部使用),什么是最简单的这样做的方式,如果可能的话。

如何将其扩展到链接到此共享库的任意数量的程序?

4

3 回答 3

2

Boost Interprocess库具有更高(ER)级别的可移植共享内存对象。

于 2008-11-11T15:50:20.460 回答
1

这根本不是正确的方法。通过执行您的建议,变量是库的全局变量,因此是程序的全局变量,但数据对于实际运行的进程是私有的。您将无法在正在运行的程序之间共享这些值。@grieve 指的是由多个线程访问的全局,但线程共享相同的父进程实例。

在实际进程中,您需要突破到特定于操作系统的共享内存设施。查看共享内存了解详细信息。这是一个可行的问题,但实现起来并不是特别简单。您还需要像信号量这样的进程间同步系统来协调使用。

于 2008-11-11T15:19:03.643 回答
0

我感觉上帝会成为某种服务器。考虑使用适当的客户端/服务器架构,以使上帝远离大众。

于 2008-11-11T15:41:17.717 回答