本人接触Linux C不久,最近在项目中遇到多线程死锁问题,求大神指点!!
好了,开始介绍问题:
主进程pthread_create4个线程,在运行过程中发现死锁问题,下面是gdb attach进去后观察到的程序堆栈信息:#0 0x000000347d6f4e6e in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x000000347d67bae8 in _L_lock_9164 () from /lib64/libc.so.6
#2 0x000000347d679482 in malloc () from /lib64/libc.so.6
#3 0x000000347d66e158 in open_memstream () from /lib64/libc.so.6
#4 0x000000347d6e199b in __vsyslog_chk () from /lib64/libc.so.6
#5 0x000000347d66f6fe in __libc_message () from /lib64/libc.so.6
#6 0x000000347d6750c6 in malloc_printerr () from /lib64/libc.so.6
#7 0x000000347d678808 in _int_malloc () from /lib64/libc.so.6
#8 0x000000347d67948d in malloc () from /lib64/libc.so.6查看最后调用的代码,并没有发现什么异常,只是调用了malloc分配内存:
1041 pakiet->data = malloc(datalen);我知道malloc是线程不安全的,但是程序中并未使用信号,线程堆栈中为何多次进入malloc?恳请各位大神求解,这是什么原因导致的??
好了,开始介绍问题:
主进程pthread_create4个线程,在运行过程中发现死锁问题,下面是gdb attach进去后观察到的程序堆栈信息:#0 0x000000347d6f4e6e in __lll_lock_wait_private () from /lib64/libc.so.6
#1 0x000000347d67bae8 in _L_lock_9164 () from /lib64/libc.so.6
#2 0x000000347d679482 in malloc () from /lib64/libc.so.6
#3 0x000000347d66e158 in open_memstream () from /lib64/libc.so.6
#4 0x000000347d6e199b in __vsyslog_chk () from /lib64/libc.so.6
#5 0x000000347d66f6fe in __libc_message () from /lib64/libc.so.6
#6 0x000000347d6750c6 in malloc_printerr () from /lib64/libc.so.6
#7 0x000000347d678808 in _int_malloc () from /lib64/libc.so.6
#8 0x000000347d67948d in malloc () from /lib64/libc.so.6查看最后调用的代码,并没有发现什么异常,只是调用了malloc分配内存:
1041 pakiet->data = malloc(datalen);我知道malloc是线程不安全的,但是程序中并未使用信号,线程堆栈中为何多次进入malloc?恳请各位大神求解,这是什么原因导致的??
解决方案 »
- 请教下这个问题怎么解决,急
- 虚拟机开不起来
- ip无法登陆xshell,提示与远程主机断开连接
- Shell脚本命令咨询
- centOS开机引导 rescue grub
- docker: Error response from daemon: network dockernet not found.
- 请教如何将x86 Linux程序的字节顺序(byte order)编译为大端
- ubuntu 该了DNS重启不生效-------
- keepalived的虚拟ip,我的阿里云域名怎么解析到这个虚拟ip上面
- linux bash/dash 问题,请大神帮忙
- 【求助】minigui 控件遮挡了
- 入门嵌入式Linux,直接学习A9还是以ARM9开始呢?
而malloc产生错误的原因,一般是内存越界、使用已释放的内存等。
针对此类问题,可以使用Valgrind工具,也可以‘export MALLOC_CHECK_=1’然后再运行看看。
http://www.cnblogs.com/tomren/archive/2011/12/24/2300602.html
也学习了。觉得你这问题不应该是malloc本身的问题,建议从更多的角度检查一下。