如何解决在Poco :: ClassLoader中,AbstractMetaObject是否没有同步问题?
我发现AbstractMetaObject :: autoDelete(pObject)调用不是线程安全的,它访问一组拥有的对象。似乎从线程访问MetaObject可能会导致拥有的对象集崩溃。
这是一个问题-为什么我们不能在不赋予MeataObject所有权的情况下删除对象?
显示我们现在删除对象的方式的代码段:
// ClassLoader instance,imagine it is passed from somewhere to the working thread
Poco::ClassLoader<IProtocol> protocol_loader;
// load library,call to prevent library unload from other threads
protocol_loader.loadLibrary(plugin_lib);
// construct an object
IProtocol* proto = protocol_loader.create(protocol_class_name);
// work with the object
proto->DoGreateThings();
// give ownership to the MetaObject of object Class
// !!! autoDelete is not thread-safe but should be colled to force object destroy !!!
proto = protocol_loader.classFor(protocol_class_name).autoDelete(proto);
// do not wait library is unloaded,force object deletion
protocol_loader.destroy(protocol_class_name,proto);
// create other objects from the same lib
// ....
// unload library if not used on other threads
protocol_loader.unloadLibrary(plugin_lib);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。