前段時間有個小特性設計多線程的問題,利用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型,完全有內存空間進行參數傳遞。