首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个关于动态库重入的有关问题

2012-04-10 
请教一个关于动态库重入的问题问题的情形如下://类A作为实际操纵动态库的接口class A{//类A的成员声明};//

请教一个关于动态库重入的问题
问题的情形如下:

//类A作为实际操纵动态库的接口
class A
{
  //类A的成员声明
};

//动态库DynamicSampler的接口函数creat()
A * creat()
{
  //new 类A的一个对象,并返回其指针pAObj1
  //通过对象A1操纵动态库
  //动态库操纵的数据均为各类对象的私有数据,不涉及全局变量和static数据成员
}

//动态库DynamicSampler的接口函数delete()
void delete(pAObj1)
{
  delete pAObj1;
}

在同一个进程内,现有线程TH1和TH2,先是TH1打开动态库DynamicSampler,并通过其接口函数creat()创建一个类A的对象AObj1,然后通过返回的指针pAObj1操纵动态库……,假设线程TH1的时间片用完时,其对动态库的操纵未结束,所以也未关闭动态库;
然后操作系统调度线程TH2,假设TH2也会打开动态库DynamicSampler,也调函数creat()创建一个类A的对象AObj1,然后通过返回的指针pAObj1操纵动态库……

该问题的基本过程就是这样,请问在线程TH1未关闭动态库的情况下,线程TH2能不能又去打开该动态库,如果能多次多次打开动态库的话,应该注意哪些问题(假设不存在访问全局数据和静态数据的情况)? 恳请各位大牛赐教!

[解决办法]
使用引用计数来控制内存释放,例如std::shared_ptr,同时类A各接口都要保证线程安全。

热点排行