English 中文(简体)
在C++中在共享库(so)内创建共享内存中的对象。
原标题:
  • 时间:2008-11-11 15:05:16
  •  标签:

有没有可能将单个神实例共享给与此代码相关的所有人,以放置在共享对象中?

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
    }
}

}

假设我在每个函数开始时执行锁同步,考虑到上帝本身可以新建/分配其他东西,但这些东西永远不会被返回给调用者(上帝只为内部使用分配内存),如果可能的话,最简单的方法是什么?

这如何扩展到连接到这个共享库的任意数量的程序?

最佳回答

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

问题回答

这完全不是正确的方法。通过您建议的做法,变量“yes”是全局的,因此程序是全局的,但是实际运行的进程的数据是私有的。您将无法在运行的程序之间共享值。 @grieve 是指被多个线程访问的全局变量,但线程共享相同的父进程实例。

Across actual processes, you need to break out to an OS specific shared memory facility. Take a look at Shared Memory for details. It s a doable issue, but it s not particularly trivial to pull off. You ll also need a interprocess synchronization system like Semaphores as well to coordinate usage.

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





相关问题
热门标签