2013-11-27 27 views
1

問題:是否初始化pthread_mutex_t對象內核持久化? - 關注Linux V 2.6以後的版本。初始化pthread_mutex_t對象內核是否持久?

動機: 如果持續性:對象資源不會與特定的清理被釋放,pthread_mutex_destroy

在實際編碼而言,這意味着 創建程序退出後,互斥對象將持續或中止不清理,除非pthread_mutex_destroy調用了 。我有常規地通過一個討厭的控制程序, ,其採用kill -9,SIGKILL,試圖kill -15(SIGTERM)之後去除代碼。程序的設計 不會改變,它是供應商代碼。 沒有辦法改變它的基本行爲。正確清理代碼通常比控制守護進程喜歡的時間要長,所以'zap'就是這個過程。這經常發生。

https://www.kernel.org/doc/Documentation/mutex-design.txt 從英戈莫爾納

[這是較舊的材料,其說「是」,自旋鎖是一個內核模式對象]

「結構互斥」是新互斥類型,在定義包括/ Linux的/mutex.h和 在kernel/locking/mutex.c中實現。它是一個基於計數器的互斥鎖,具有 螺旋鎖和等待列表。該計數器有3種狀態:1爲「解鎖」,0爲 「鎖定」,負數(通常爲-1)爲「鎖定,潛在服務員 排隊」。

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

  • 比調用線程之外的所有線程的 execve的過程中被破壞()。互斥體,條件變量和其他pthreads 對象不會被保留。

因此,調用exec(),family之一不是一種確定持久性的方法。

http://man7.org/linux/man-pages/man3/exit.3.html有任何關於互斥一個 或其他方式。

有人能指出我的最終代碼或文檔的一種方式或其他? 我需要用堅實的東西來面對我們的供應商。在Linux中

+2

問問你自己:莫非任何問題,你想象一個十二歲被用來編寫針對Linux服務器微不足道的DOS攻擊?如果是這樣,那麼問題可能不存在。 –

+0

是的,但供應商是11歲。 (幽默)。如果你說的是真的,那麼告訴我是我所要求的。 –

+1

您正在查看的互斥體文檔是內核內部使用的(在內核組件和模塊之間)。它與pthread互斥體無關。這可能是你混淆的根源。 –

回答

2

P線程互斥沒有內核對象。 pthread_mutex_destroy不會進行任何系統調用,因爲沒有內核資源可用。 strace它,看看你自己。

由英格·蒙內鏈接的文檔有關的內部的Linux內核,不是並行線程互斥會談。他們是完全不同的野獸。

+0

僅供參考,在這裏您可以看到'pthread_mutex_destroy'本質上是一個無操作:https://sourceware.org/git/?p=glibc.git;a=blob;f=nptl/pthread_mutex_destroy.c ; h = d2c492fcb780db1dc874b3cc40a982ef66317bbd; hb = HEAD –

+0

@ nm連同鏈接一起是需要的。 –