我有关于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%d\n",++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]); }