频繁起pthread会导致pthread出错误吗?

guolisen 2012-12-26 09:32:51
频繁起pthread会导致pthread出错误吗?

我写了个Tcp echo server应用,分为前端用libev处理连接,一有连接就起个线程收数据(detach线程),将数据转成zmq数据后发送到后端。
后端是一个zeromq Server,zeromq处理完数据后再返回。处理完线程自己退出,但是前段的libev处没有用threadpool,直接pthread起的,起多少个没做限制(但一般不超过100个)

现在的问题是客户端起100个线程向这个server发数据,大概几个小时后zeromq里面的pthread_mutex_destroy 就会返回非0值导致assert报错。请问这个zmq的错误,会是起线程的问题吗?

...全文
241 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
guolisen 2012-12-31
  • 打赏
  • 举报
回复
引用 5 楼 nevil 的回复:
The pthread_mutex_destroy function returns the following error code on error: EBUSY the mutex is currently locked. 引用 4 楼 guolisen 的回复:引用 2 楼 nevil 的回复:pthre……
引用 3 楼 phoenix_1992 的回复:
pthread本身没有错误,关键是对临界资源的利用问题吧 要用到互斥锁。。
引用 1 楼 mymtom 的回复:
pthread本身是不会出错的,是不是zmq引起的问题?
考虑了一下我在线程里面申请zmq_socket,线程退出前释放,估计是在这个释放的地方出现的问题,看了一下zmq关闭socket的代码发现,zmq并不是直接调用close之类的函数去关闭,而是给自己的context发送一个消息(写管道),是一个异步过程,由于我的线程是detach的,很有可能是线程先释放自己的资源后,zmq去做关闭工作,导致未定义错误,因此在线程退出前加了一个一毫秒演示,跑了一天貌似没有问题了
__phoenix 2012-12-27
  • 打赏
  • 举报
回复
pthread本身没有错误,关键是对临界资源的利用问题吧 要用到互斥锁。。
nevil 2012-12-27
  • 打赏
  • 举报
回复
pthread_mutex_destroy出错一般就是mutex还没有unlock,这不是pthread的问题,肯定是code的问题
mymtom 2012-12-27
  • 打赏
  • 举报
回复
pthread本身是不会出错的,是不是zmq引起的问题?
nevil 2012-12-27
  • 打赏
  • 举报
回复
The pthread_mutex_destroy function returns the following error code on error: EBUSY the mutex is currently locked.
引用 4 楼 guolisen 的回复:
引用 2 楼 nevil 的回复:pthread_mutex_destroy出错一般就是mutex还没有unlock,这不是pthread的问题,肯定是code的问题 看了一下strerror (x) 报的错是“Device or resource busy (mutex.hpp:90)”
guolisen 2012-12-27
  • 打赏
  • 举报
回复
引用 2 楼 nevil 的回复:
pthread_mutex_destroy出错一般就是mutex还没有unlock,这不是pthread的问题,肯定是code的问题
看了一下strerror (x) 报的错是“Device or resource busy (mutex.hpp:90)”

23,125

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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