c – 对Qt和boost线程本地存储的限制
发布时间:2020-12-16 07:26:03 所属栏目:百科 来源:网络整理
导读:我有关于QThreadStorage和boost的thread_specific_ptr的以下问题: 1)Qthreadstorage中可以存储的对象数量是否有限制?我遇到了一个关于256个QThreadStorage对象的qt查询,所以想澄清这个限制指向的是什么? 2)QThreadStorage是否仅适用于QThreads? 3)对升压
我有关于QThreadStorage和boost的thread_specific_ptr的以下问题:
1)Qthreadstorage中可以存储的对象数量是否有限制?我遇到了一个关于256个QThreadStorage对象的qt查询,所以想澄清这个限制指向的是什么? 2)QThreadStorage是否仅适用于QThreads? 3)对升压有限制吗? 4)我有一个用例,我想在tls上操作并在所有线程完成进一步处理时将数据同步到主线程.我写了下面的代码,并想检查下面的代码是否正常. #include <iostream> #include <boost/thread/thread.hpp> #include <boost/thread/tss.hpp> boost::mutex mutex1; int glob = 0; class data { public: char* p; data() { p = (char*)malloc(10); sprintf(p,"test%dn",++glob); } }; char* global_p[11] = {0}; int index = -1; void cleanup(data* _ignored) { std::cout << "TLS cleanup" << std::endl; boost::mutex::scoped_lock lock(mutex1); global_p[++index] = _ignored->p; } boost::thread_specific_ptr<data> value(cleanup); void thread_proc() { value.reset(new data()); // initialize the thread's storage std::cout << "here" << std::endl; } int main(int argc,char* argv[]) { boost::thread_group threads; for (int i=0; i<10; ++i) threads.create_thread(&thread_proc); threads.join_all(); for (int i=0; i<10; ++i) puts(global_p[i]); } 解决方法
我可以部分回答你的问题.
> 256限制属于旧qt.可能你正在阅读旧文档.新的qt版本(即4.6以上)没有这样的限制 我希望这有帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |