我的程序是死锁的,下面是死锁的前4帧:
#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我倾向于认为这是我做错了什么导致的问题。当对服务器施加压力并使其达到高使用率时,我们会看到死锁,但否则我们无法重现这种情况。有没有人知道是哪种错误导致了这种情况?
发布于 2014-04-12 09:08:24
根据POSIX,在多线程进程中调用fork之后,子进程处于异步信号上下文中,如果您在调用_exit或某个exec系列函数之前执行了除调用异步信号安全函数之外的任何操作,则会调用未定义的行为。
发布于 2014-04-12 07:25:49
如果不同的执行线程以不同的顺序获取共享资源,则最常出现死锁。在压力下出现是一个很好的指标。您拥有的支持:
A == 1 2
B == 2 1现在,假设在A获取1之后,但在它获取2之前,您得到了一个线程重新调度。线程B运行并获取2,然后控制返回到A;它现在被阻塞,等待资源2,资源2由B持有,B正在等待A持有的资源1。现在,A不能继续,B也不能继续;死锁。
死锁的另一个原因是对此的细微变化,其中一个执行路径在不遵守资源锁定的情况下声明资源;这将误导遵循规则的其他执行线程。
希望这能有所帮助。
https://stackoverflow.com/questions/23023738
复制相似问题