【 在 ylh1969 的大作中提到: 】
: 一个服务器系统,承担着大量的客户业务,当服务模块业务变更时,通常需要停止服务升级系统。
: 如何建立动态热插拔的模块更换,使得服务器在不影响业务运行时升级功能,这里提供一种方法。
: 例子是在linux环境,用.so实现。WINDOS用DLL实现也是一样的。
: ...................
/******************************************************
* 动态模块的应用服务入口,app层
* json="{model:"modelname",param:{....}}"
* model是调用的so名字
* param是提交给模块的数据
******************************************************/
。。。。。。。。。。
nodep=(cmd_node *)trp->Content;
pthread_mutex_lock(&nodep->mut);
nodep->lock++; //引用计数
pthread_mutex_unlock(&nodep->mut);
}
pthread_rwlock_unlock(&dmlock);
if(nodep->cmd) {
result=nodep->cmd(srvp,json_object_object_get(json,"param"),err_json);//执行,支持多线程协程,没有线程锁。
pthread_mutex_lock(&nodep->mut);
nodep->lock--;// 引用计数
pthread_mutex_unlock(&nodep->mut);
if(nodep->lock==0) pthread_cond_signal(&nodep->cond);//通知管理模块可以更换了。
}
--
修改:ylh1969 FROM 221.218.60.*
FROM 221.218.60.*