是否可以在链接到此代码的每个人之间共享一个'god'实例,放在共享对象中?
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
}
}
}
如果我在每个函数的开头执行锁定同步,并考虑到上帝本身可以新建/ malloc其他东西,但这些东西永远不会自己返回给调用者(上帝mallocs仅供内部使用),如果可能的话,这是最简单的方法。
如何将其扩展到链接到此共享库的任意数量的程序?
答案 0 :(得分:2)
Boost Interprocess库具有高(er)级别的可移植共享内存对象。
答案 1 :(得分:1)
这根本不是正确的做法。通过执行您的建议,变量yes是库的全局变量,因此是程序的全局变量,但数据对于实际运行的进程是私有的。您将无法在正在运行的程序中共享值。 @grieve是指由多个线程访问的全局,但线程共享相同的父流程实例。
在实际流程中,您需要突破到特定于操作系统的共享内存设施。 有关详细信息,请查看Shared Memory。这是一个可行的问题,但这并不是特别容易实现的。您还需要一个像Semaphores这样的进程间同步系统来协调使用。
答案 2 :(得分:0)
我觉得 god 将成为某种服务器。考虑使用适当的客户端/服务器架构,以使上帝远离群众。