初始化的pthread_mutex_t对象内核是否持久?

时间:2013-11-27 22:46:35

标签: c linux-kernel

问题:是否初始化了pthread_mutex_t对象内核持久化? - 关注的是Linux V 2.6以后的版本。

动机: 如果持久化:对象资源将不会通过特定清理pthread_mutex_destroy

发布

在实际编码术语中,这意味着互斥对象将在之后持续存在 除非pthread_mutex_destroy,否则无需清理即可创建程序退出或中止 叫做。我有一个令人讨厌的控制程序常规删除的代码, 在尝试kill -9(SIGTERM)之后使用kill -15,SIGKILL。该设计 该程序不会改变,它是供应商代码。没有办法 改变它的基本行为。正确清理代码通常需要更长的时间 控制守护进程喜欢,所以'zap'就是这个过程。这经常发生。

https://www.kernel.org/doc/Documentation/mutex-design.txt 来自Ingo Molnar

[这是较旧的材料,表示'是',自旋锁是内核模式对象]

'struct mutex'是新的互斥锁类型,在include / linux / mutex.h和 在kernel / locking / mutex.c中实现。它是一个基于计数器的互斥锁 自旋锁和等待列表。计数器有3种状态:1表示“未锁定”,0表示 “锁定”和负数(通常为-1)表示“锁定的潜在服务员” 排队”。

http://man7.org/linux/man-pages/man2/execve.2.html有:

  • 调用线程以外的所有线程都会被破坏       的execve()。互斥锁,条件变量和其他pthread       对象不会被保留。

所以调用exec()之一,系列不是确定持久性的方法。

http://man7.org/linux/man-pages/man3/exit.3.html没有任何关于互斥锁的内容 方式或其他。

有人可以通过这种方式向我指出明确的代码或文档吗? 我需要用坚实的东西来面对我们的供应商。

1 个答案:

答案 0 :(得分:2)

Linux中的Pthreads互斥体不是内核对象。 pthread_mutex_destroy不进行任何系统调用,因为没有可用的内核资源。 strace它自己看看。

Ingo Molnar的链接文档讨论了Linux内核内部的互斥体,而不是pthreads。他们是完全不同的野兽。