有關Linux下線程的創建

前段時間有個小特性設計多線程的問題,利用linux中創建線程的函數。

#include <pthread.h>

int pthread_create(pthread_t *thread

                          const pthread_attr_t *attr,
                          void *(*start_routine) (void *), 

                          void *arg);       

 

Compile and link with -pthread.

 

由於系統中用的是ACE封裝的基礎庫,在多線程傳參的時候一直有問題。參數需求是,爲了傳遞一個數據庫的bindID給定時任務,爲了數據庫查詢超時,保護後臺的基礎業務。

但是多線程調試的時候,日誌中顯示傳入的ID,void* arg參數老是和創建線程時的ID不一致,以爲是ACE庫問題導致。後來經導師提醒,線程中的arg,在另外線程中,它的內存被free了,導致數據不對。恍然大悟,這個參數,一般定義都是全局的控制塊去訪問的,自己一不小心用了個ULONG,給忘了。其實在這個應用中,完全不用去創建一個全局的變量,浪費內存的。因爲* arg 就是ULONG型,完全有內存空間進行參數傳遞。


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章