Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ activemq cpp抛出;线程本地存储限制“;发送时到达_C++_Multithreading_Activemq Cpp - Fatal编程技术网

C++ activemq cpp抛出;线程本地存储限制“;发送时到达

C++ activemq cpp抛出;线程本地存储限制“;发送时到达,c++,multithreading,activemq-cpp,C++,Multithreading,Activemq Cpp,我一直在开发一个与ActiveMQ cpp(库版本3.8.2)互连的线程数据池系统。系统管理一组可以定期合并的设备,轮询结果发送到代理中的队列。应答队列可以通过控制消息随时更改,因此生产者和目的地会不断更改。只有一个订阅者接收所有控制命令,几个线程从自己的会话创建生产者和消息。所有消息都是文本消息 所有activemq cpp元素都封装在RAII元素中,但在密集使用后的某个时刻,连接会接收消息,但当我尝试发送响应时,库会抛出一个异常,读取“已达到线程本地存储限制”。之后,它会收到更多的消息(有时

我一直在开发一个与ActiveMQ cpp(库版本3.8.2)互连的线程数据池系统。系统管理一组可以定期合并的设备,轮询结果发送到代理中的队列。应答队列可以通过控制消息随时更改,因此生产者和目的地会不断更改。只有一个订阅者接收所有控制命令,几个线程从自己的会话创建生产者和消息。所有消息都是文本消息

所有activemq cpp元素都封装在RAII元素中,但在密集使用后的某个时刻,连接会接收消息,但当我尝试发送响应时,库会抛出一个异常,读取“已达到线程本地存储限制”。之后,它会收到更多的消息(有时文本会被破坏),但尝试发出新消息会再次陷入线程存储异常,然后完全停止接收和发送

有人发现过这种问题吗?欢迎任何帮助


更新:我已经编译并使用了新的3.8.3版本,仍然可以重现错误。测试是在RHEL 5.7和Fedora 20中完成的,这两种64位体系结构。

经过几天的调试和包装中的重新计数,我们发现罪魁祸首是指向未删除结构的指针放错了位置。这尤其将Valgrind的memcheck中丢失的指针隐藏为“间接丢失”

毕竟,当前的问题是一组未删除的cms::会话指针(其他cms对象也会发生这种情况)


正如Session部分中的一样,cms::Session是一个单线程元素。但是,它还声明创建它的连接控制它的多个操作,为此它保留对生成会话的引用,所有这些都存储在连接线程堆栈中。因此,当连接容量已满时,大量会话创建将触发“线程本地存储限制已达到”。

经过几天的调试和包装中的重新计数,我们发现罪魁祸首是指向未删除结构的指针放错了位置。这尤其将Valgrind的memcheck中丢失的指针隐藏为“间接丢失”

毕竟,当前的问题是一组未删除的cms::会话指针(其他cms对象也会发生这种情况)


正如Session部分中的一样,cms::Session是一个单线程元素。但是,它还声明创建它的连接控制它的多个操作,为此它保留对生成会话的引用,所有这些都存储在连接线程堆栈中。因此,当连接容量已满时,大量会话创建将触发“达到线程本地存储限制”。

您在线程堆栈上使用了很多变量吗?@Matt 99%如果系统中的变量是进程堆栈中的共享RAII对象,剩余的1%是作用域生产者/消息。请尝试移动到版本3.8.3,以查看是否有解决方案it@TimBish:仍然使用3.8.3中断,更新了问题以反映这一点。@Nare TLS的行为依赖于操作系统(和线程库),您使用的是哪一个?您在线程堆栈上使用了很多变量吗?@Matt 99%如果系统中的变量是进程堆栈中的共享RAII对象,则剩余的1%是作用域生产者/消息。请尝试移动到版本3.8.3,以查看修复是否解决了问题it@TimBish:使用3.8.3仍然会断开,更新了问题以反映这一点。@Nare TLS的行为依赖于操作系统(和线程库),您使用哪一个?