首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >malloc_atfork中的死锁

malloc_atfork中的死锁
EN

Stack Overflow用户
提问于 2014-04-12 06:39:52
回答 2查看 966关注 0票数 0

我的程序是死锁的,下面是死锁的前4帧:

代码语言:javascript
复制
#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

我倾向于认为这是我做错了什么导致的问题。当对服务器施加压力并使其达到高使用率时,我们会看到死锁,但否则我们无法重现这种情况。有没有人知道是哪种错误导致了这种情况?

EN

回答 2

Stack Overflow用户

发布于 2014-04-12 09:08:24

根据POSIX,在多线程进程中调用fork之后,子进程处于异步信号上下文中,如果您在调用_exit或某个exec系列函数之前执行了除调用异步信号安全函数之外的任何操作,则会调用未定义的行为。

票数 1
EN

Stack Overflow用户

发布于 2014-04-12 07:25:49

如果不同的执行线程以不同的顺序获取共享资源,则最常出现死锁。在压力下出现是一个很好的指标。您拥有的支持:

代码语言:javascript
复制
A == 1 2
B == 2 1

现在,假设在A获取1之后,但在它获取2之前,您得到了一个线程重新调度。线程B运行并获取2,然后控制返回到A;它现在被阻塞,等待资源2,资源2由B持有,B正在等待A持有的资源1。现在,A不能继续,B也不能继续;死锁。

死锁的另一个原因是对此的细微变化,其中一个执行路径在不遵守资源锁定的情况下声明资源;这将误导遵循规则的其他执行线程。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23023738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档