我的程序死锁,这是死锁的前四帧:
#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:97
#1 0x00007f926250b7aa in _L_lock_12502 () at malloc.c:3507
#2 0x00007f926250a2df in malloc_atfork (sz=12, caller=<value optimized out>) at arena.c:217
#3 0x00007f926250881a in __libc_calloc (n=<value optimized out>, elem_size=<value optimized out>) at malloc.c:4040
我倾向于这是由于我做错了所引起的问题。我们在强调服务器并将其用于高使用率时看到了死锁,但否则我们无法重现这一点。有谁知道这会导致什么样的错误?
答案 0 :(得分:1)
根据POSIX,在多线程进程中调用fork
之后,子进程处于异步信号上下文中,如果除了在调用{{1之前调用异步信号安全函数之外的任何其他操作}}或其中一个_exit
系列函数。
答案 1 :(得分:0)
如果不同的执行线程以不同的顺序获取共享资源,则最常遇到死锁。在压力下出现是一个很好的指标。支持你:
A == 1 2
B == 2 1
现在,假设您在A获得1
之后但在抓取2
之前立即获得了一个线程重新安排。线程B运行并获取2
,然后控制返回A;它现在被阻塞等待资源2,它由B持有,它等待A持有的资源1.现在,A不能继续,B也不能;死锁。
死锁的另一个原因是稍有不同,其中一个执行路径声称资源而不遵守资源锁定;这将误导遵守规则的其他执行线程。
希望这有帮助。