1. 程式人生 > >pthread_kill導致程式崩潰 Segmentation fault

pthread_kill導致程式崩潰 Segmentation fault

pthread_t thread_id;

printf("thread = %d\n",pthread_kill(thread_id,0));

上述用法,在未對一個pthread_t執行pthread_create前呼叫pthread_kill,會出現Segmentation fault

google上摘錄如下解釋:

pthread_t is not a thread ID, or a numeric index. It is an opaque type. Making up values can result in a crash.

On Linux NPTL, pthread_t is used as a pointer:

int
__pthread_kill (threadid, signo)pthread_t threadid;int signo;{struct pthread *pd =(struct pthread *) threadid;

It should be fairly clear where things are going wrong already :) Note that this pointerness is also an implementation detail - the older Linuxthreads implementation used numeric indices into a table, and there you could indeed make up TIDs and not expect things to crash.

You need to be tracking thread life and death yourself. A pthread_t is valid until you call pthread_join on it successfully. If you want to test whether a valid pthread_t is alive, call pthread_tryjoin_np on it; if it returns EBUSY, the thread is alive. If the function succeeds, the pthread_t is no longer valid

; you must not re-use it at this point - so you must make a note somewhere that that thread is dead now, and there's no need to check it anymore!

You could, of course, implement your own tracking system - create a table somewhere of liveness, a system for handing out TIDs, and passing them into newly created threads. Have each thread mark itself as dead prior to exiting (perhaps using pthread_cleanup_push so you handle thread cancellation and pthread_exit), and detach the thread so you don't need to join it (using pthread_detach). Now you have explicit control of your thread-death reporting.


相關推薦

pthread_kill導致程式崩潰 Segmentation fault

pthread_t thread_id;printf("thread = %d\n",pthread_kill(thread_id,0));上述用法,在未對一個pthread_t執行pthread_create前呼叫pthread_kill,會出現Segmentation f

將NULL指標賦值給std::string變數導致程式崩潰

如題:如上圖,但是我們還會經常寫這樣的程式碼,例如我的flamingo中有程式碼如下(已經修正):位於queryresult.cpp中如果fields[i].name為NULL的話,程式將崩潰。備忘一下

android StrictMode設定導致程式崩潰

    在andorid開發過程中有時候會用到StrictMode進行相關操作,可以用來幫助開發者發現程式碼中的一些不規範的問題,以達到提升應用響應能力的目的 StrictMode分為以下兩種策略:1

安卓從googlephoto上選擇雲端圖片導致程式崩潰的解決方案

當軟體選擇照片時,如果選擇的是使用googlephoto或google雲備份過,並在本地刪除過的圖片時,程式就會崩潰或圖片是空白 ,報錯原因: IllegalArgumentException:InvalidURI:content://com.google

ios 使用執行時規避陣列等越界導致程式崩潰

#import "NSMutableArray+TonyRuntime.h"#import <objc/runtime.h>@implementation NSMutableArray (TonyRuntime)+(void)load{staticdispatch_once_t onceToken

兩個會導致程式崩潰的注意點

    某次設定網路引數的時候,我用setObject:forKey:設定,發現每次程式執行到網路請求部分就崩潰,當時以為是網路請求完的結果處理不當導致的。經過斷點發現每次執行到setObject:forKey:的時候就崩潰。於是發現自己平常使用setObject:forKey:和setValue:forK

程式碼混淆導致程式崩潰原因分析

程式碼混淆是一種專案加密的方法,混淆後的類和方法會重新命名成a.a.b.c的形式,從而防止反編譯破解程式碼。 如果程式碼中使用了反射或者呼叫了JNI等底層程式碼,程式碼混淆會導致程式崩潰, 例如使用JSONObject.toJavaObject()方法將json轉化為物件時

上萬行程式碼級專案開發中快速定位導致程式崩潰的bug的方法

一個專案在開發除錯階段,已經有上萬行程式碼了,但是過程中往往會遇到讓人頭痛的bug,程式莫名其妙的奔潰了,bug在哪裡呢? [NSNull length]: unrecognized select

mini2440開發板執行Qt程式出現Segmentation fault的另一種奇葩原因:Ubuntu下使用FileZilla通過FTP方式傳輸程式

使用QWT-6.1.2寫了一個名為dataplot的小程式,Ubuntu下執行正常,遂交叉編譯後傳到開發板上,執行,報錯:Segmentation fault。 主機環境:Ubuntu 12.04 + gcc 4.6.3 + Qt 4.8.1 開發環境:arm-linux-

WriteFile導致程式崩潰的問題

原文:http://www.cnblogs.com/chenkunyun/archive/2012/04/18/2454921.html 在win10上,用vs2010編譯的程式,有一個writefile,在win10上執行沒問題,到了win7上,不論32位 還是64位都

你的java/c/c++程式崩潰了?揭祕段錯誤(Segmentation fault)(3)

前言 接上兩篇: 寫到這裡,越跟,越發現真的是核心上很白,非一般的白。 但是既然是研究,就定住心,把段錯誤搞到清楚明白。 本篇將作為終篇,來結束這個系列,也算是對段錯誤和程式除錯、尋找崩潰原因(通常不會給你那麼完美的stackstrace和人性化的錯

close掉一個失效的MySQL連線導致程式崩潰

這在沒有連結池控制的應用中十分常見,而我正好在做和MySQL相關的開發工作,在一般的工具類應用中,並沒有使用連結池進行連線的管理,而是直接使用MySQL提供的C API進行操作。而這給我的程式帶來過很多麻煩 比如程式碼如下 int main() { MYSQL *conn

記今天在執行程式時出現的segmentation fault(core dumped)

剛剛在複習資料結構的時候寫了一些單鏈表的操作,執行的時候出現segmentation fault(core dumped) 一番查錯後發現原來在寫初始化連結串列的時候形參少加了一級指標,修改完後可以正常執行,以為這就是造成segmentation fault 的原因。 過了一會想到我之前也有

centos6.5系統升級glibc時出錯導致不管輸入什麼命令都是 Segmentation fault 解決

因為升級glibc-2.18結果導致系統出現錯誤不管輸入什麼命令都是段錯誤: [root@node04 ~]# ls Segmentation fault [root@node04 ~]# vim Segmentation fault 出現這種情況如果是虛擬

FindContours()函式使用時導致程式崩潰問題的解決方案

最近通過使用opencv做標誌牌檢測時,涉及到了opencv庫中findContours函式的呼叫,在對該函式使用時出現了程式崩潰的問題,花了兩天的時間才解決的該問題。 下面先對findContour函式進行簡單的介紹,再次介紹一下碰到findcontours

應用待機時間過長導致記憶體被回收程式崩潰

 android:alwaysRetainTaskState="true"  新增這句話就不蹦了   android:allowTaskReparenting=["true" | "false"]      是否允許activity更換從屬的任務,比如從簡訊息任務

iOS 同一頁面載入上百張圖片,迅速滑動時導致記憶體暴漲程式崩潰的參考解決方法

本例中專案大致流程是先由客戶端拍照或者選擇相簿中的圖片進行上傳,然後可以從詳情頁面中瀏覽所有上傳的圖片,由於圖片是按照相簿進行分類,而每個相簿中最多可以有50張照片,極限的情況是詳情頁面最多可以有20多個相簿,由此導致需要對圖片的載入進行必要的優化,避免程式佔用

規避QT4.8.5版本下ocx(dll的情況下)使用QNetworkAccessManager導致程式退出時產生的崩潰問題

    在Qt4.8.5版本生成的OCX(dll)中使用QNetworkAccessManager去做http請求。但是在程序退出後崩潰。   崩潰到qt_call_post_routines內部。    解決辦法:        QNetworkAccessManager

你的C/C++程式為什麼無法執行?揭祕Segmentation fault (1)

什麼讓你對C/C++如此恐懼? 晦澀的語法?還是優秀IDE的欠缺? 我想那都不是問題,最多的可能是一個類似這樣的錯誤: 段錯誤(Segmentation fault) 這是新手無法避免的錯誤,也是老手極力迴避也經常遇到的錯誤。 本篇,試圖簡略地剖析

ros rviz: Segmentation fault (core dumped) 與 [rviz -1] process has died [pid 10134, exit code -6]

工作 alt ack 問題 依賴 art roc register pre 1. 執行roslaunch 文件打開 某rviz文件。出現了例如以下的錯誤: [rviz-1] process has died [pid 10134, exit code -6] 2. 執