最近在系統裡遇到乙個程式,總會莫名其妙的segmentation fault,而且每次出現的問題都不相同。考慮到有多執行緒,可能會跟這個有關係。但是一直沒有找出到底**出的問題,這個程式使用libpcap的一些function來進行抓包分析,每個網絡卡對應乙個執行緒。
function裡面沒有顯式的全域性變數。
然後就想到,通過function back trace來看看。找到
*****== backtrace: *****====
/lib64/libc.so.6[0x3e4ca76166]
/lib64/libc.so.6[0x3e4ca78c93]
/lib64/libc.so.6[0x3e4ca7bb60]
/lib64/libc.so.6(realloc+0xe5)[0x3e4ca7bdd5]
./dnsaudit[0x41a413]
./dnsaudit[0x41a639]
./dnsaudit[0x41a770]
./dnsaudit[0x41a7f9]
./dnsaudit[0x41a879]
./dnsaudit[0x40b218]
./dnsaudit[0x407a58]
/lib64/libpthread.so.0[0x3e4d2079d1]
/lib64/libc.so.6(clone+0x6d)[0x3e4cae8b6d]
通過objdump -s dnsaudit >tmp
找到出事的問題點,果然是在庫函式裡面,pcap_ensure_buffer_stack
看了一下出事的行:if (!(yy_buffer_stack)) {
這個yy_buffer_stack
static yy_buffer_state * yy_buffer_stack = 0; /**< stack as an array. */
靜態變數啊。。。多執行緒的使用肯定是有問題的
zhtread c 多執行緒庫的使用
很早就買了c 程式設計思想第二卷這本書 可惜最後一章一直沒有看。於是找個時間看看多執行緒也比較好啊 使用編譯好的zthread庫 自己先寫個簡短的例子 如下 include include pragma comment lib,zthread z.lib class thread public zt...
Sqlite記憶體資料庫在多執行緒下的使用問題
windows平台,多執行緒伺服器,我想建立乙個全域性記憶體資料庫,然後在其他執行緒裡面使用這個庫,包括讀寫,弄的時候發現有幾個問題 1 方法一 程式啟動時建立乙個全域性sqlite連線,各個執行緒都可以操作這個例項。但經測試發現,這麼做,如果不做同步,讀寫都會衝突。也就是說,無論讀寫,只能有乙個執...
Sqlite記憶體資料庫在多執行緒下的使用問題
sqlite 記憶體資料庫的attach 我已經往記憶體資料庫a插入了10w條資料,我現在想把a匯入乙個物理檔案b 具有相同表結構 是不是應該用attach指令?有沒有高人詳細指點一下?sqlite3 open memory db ret sqlite3 exec db,create table n...