请教一个关于动态库重入的问题
问题的情形如下:
//类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各接口都要保证线程安全。