libcurl多线程问题

xia_wj 2011-09-29 01:40:40
通过libcurl多线程连接https网站, 会用到openssl, openssl需要通过设置才能线程安全.
如何设置才使libcurl不会在openssl内部crash.

我这边的代码是.
main()
{
curl_global_init
main flow.
curl_global_cleanup
}

thread1~5()
{
CURL *pCurl = curl_easy_init;
curl_set_opt(pCurl, ...);
curl_easy_perform(pCurl);
curl_easy_cleanup;
}

线程越多, 越容易crash在curl调用ssl的地方, 如果设置才没有问题.
callstack
#0 0x0000003602b95948 in lh_free () from /lib64/libcrypto.so.4
#1 0x0000003602b959bc in lh_retrieve () from /lib64/libcrypto.so.4
#2 0x0000003602b97dba in ERR_set_implementation () from /lib64/libcrypto.so.4
#3 0x0000003602b9874e in ERR_get_state () from /lib64/libcrypto.so.4
#4 0x0000003602b98aac in ERR_clear_error () from /lib64/libcrypto.so.4
#5 0x0000003602e1ddc7 in ssl23_connect () from /lib64/libssl.so.4
#6 0x0000000000707882 in Curl_SSLConnect ()
#7 0x0000000000715a3e in Curl_http_connect ()
#8 0x00000000007023c2 in Curl_protocol_connect ()
#9 0x00000000007031a5 in Curl_connect ()
#10 0x000000000070e396 in Curl_connect_host ()
#11 0x000000000070e598 in Curl_perform ()

有什么方案可以解决, 解决了再开贴给500分, 每次只能给100分.
...全文
1713 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq120848369 2011-09-29
  • 打赏
  • 举报
回复
共享变量必须加锁,没什么可变通的,只能考虑设计减少加锁.

而且加锁多线程和单线程不可能一样,我服务器有4个核,我不信单线程跑的过多线程.
xia_wj 2011-09-29
  • 打赏
  • 举报
回复
如果自己加锁和单线程没区别了, 最后还是在网上找一些方案解决了.
openssl里面的很多数据都是实用共享的全局资源, 如果多线程的话很容易crash.
但是openssl自己不想强制加锁, 这样会影响他的效率, 所以让用户注册一些回调函数给openssl.
这样多线程用户可以自己写函数锁, 然后注册到openssl, openssl在遇到多线程共享资源的时候.
会调用你传给他们的函数锁.

不过感谢大家的友情帮顶, 100分均分吧.
PG 2011-09-29
  • 打赏
  • 举报
回复
友情帮顶!
至善者善之敌 2011-09-29
  • 打赏
  • 举报
回复
友情帮顶!
luciferisnotsatan 2011-09-29
  • 打赏
  • 举报
回复
不太清楚,不行就加锁吧
konta 2011-09-29
  • 打赏
  • 举报
回复
友情帮顶下~

64,281

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧