我想使用多線程來允許兩個任務在一個DLL內並行運行,但我的應用程序不斷崩潰,顯然是由於一些不良的資源衝突管理;這裏是詳細信息: 我需要沿着主邏輯流從某個點調用相同的函數(DoGATrainAndRun),爲其中一個參數傳遞不同的值,讓這兩個參數運行,然後返回到主邏輯流程,並使用2次調用返回的兩組(不同)值。c多線程衝突
(這是在主頭文件):
typedef struct
{
int PredictorId;
int OutputType;
int Delta;
int Scale;
int Debug;
FILE* LogFile;
int TotalBars;
double CBaseVal;
double* HVal;
int PredictionLen;
double*** Forecast;
} t;
(這是在主邏輯流):
hRunMutex=CreateMutex(NULL, FALSE, NULL);
arg->OutputType=FH;
handle= (HANDLE) _beginthread(DoGATrainAndRun, 32768, (void*) arg);
arg->OutputType=FL;
handle= (HANDLE) _beginthread(DoGATrainAndRun, 32768, (void*) arg);
do {} while (hRunMutex!=0);
CloseHandle(hRunMutex);
(這是在DoGaTrainAndRun的結尾):
free(args);
ReleaseMutex(hRunMutex);
我很新的多線程,我似乎無法弄清楚這一個...
看起來您正在傳遞相同的'arg'兩個線程。這可能是錯誤的。 – dohashi 2014-10-27 15:04:31
你爲什麼這麼說?正如你所看到的,我在調用_beginthread之前設置了arg-> OutputType – gcaglion 2014-10-27 15:07:02
您可以將整個線程proc代碼與抓取/釋放互斥鎖的地方一起發佈嗎? – Lundin 2014-10-27 15:10:49