c – 对Qt和boost线程本地存储的限制

c – 对Qt和boost线程本地存储的限制,第1张

概述我有关于QThreadStorage和boost的thread_specific_ptr的以下问题: 1)Qthreadstorage中可以存储的对象数量是否有限制?我遇到了一个关于256个QThreadStorage对象的qt查询,所以想澄清这个限制指向的是什么? 2)QThreadStorage是否仅适用于QThreads? 3)对升压有限制吗? 4)我有一个用例,我想在tls上 *** 作并在所有线 我有关于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 storagestd::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以上)没有这样的限制
> QThreadStorage可以在线程退出时销毁包含的项目,因为它与QThread密切配合.因此,在我看来,将这两者分开并不是一个明智的想法.
>在这里,我想你要问的是可以用boost tls存储的对象数量.我不知道对升压有任何限制.你应该没事.
>你的代码对我来说看起来不错,除了在数据的构造函数中你需要在glob之前放置一个互斥锁,否则你可能得不到递增值.

我希望这有帮助.

总结

以上是内存溢出为你收集整理的c – 对Qt和boost线程本地存储的限制全部内容,希望文章能够帮你解决c – 对Qt和boost线程本地存储的限制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229577.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存