亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么傳進去的變量算得到的結果被賦給其他變量了

為什么傳進去的變量算得到的結果被賦給其他變量了

Helenr 2023-03-03 22:18:53
問題描述:有80個計算狀態(popsize = 80),現在計劃用10核計算(建立10個線程nThreadCount = 10),由于每個狀態的計算時間不同(不可預測,大概在15分鐘以內),為了節省計算時間,計劃一個線程的計算狀態完成后,緊跟著將緊跟著的下一個計算狀態調入計算(不關閉線程),但是計算結果發現:傳進評估函數(test_problem函數)的計算結果與變量不對應,即傳進去的變量算得到的結果被賦給其他變量了。郁悶!求高手幫忙!//線程建立函數void create_proc(population *pop){int i;HANDLE* threads = new HANDLE[nThreadCount]; // 線程句柄,nThreadCount = 10thread_pos = 0;hMutex = CreateMutex(NULL,FALSE,NULL); // 建立互斥對象for (i = 0; i < nThreadCount; i++){threads[i] = CreateThread( NULL, 0, TaskThreadProc, pop, 0, NULL); // 創建線程thread_pop_pos[i] = 0;SetThreadAffinityMask(threads[i], 1<<i); //分配核計算if (threads[i] == NULL)  {  printf("\n thread %d have not been created sucessfully, hence exiting", i);system("pause");exit(1);  }  SuspendThread(threads[i]);}for(i = 0; i <nThreadCount; i++){ResumeThread(threads[i]);Sleep(1000);}WaitForMultipleObjects(nThreadCount, threads, TRUE, INFINITE); // 等待線程運行結束for (i = 0; i < nThreadCount; i++)CloseHandle(threads[i]); // 銷毀線程delete [] threads;}// 線程函數DWORD WINAPI TaskThreadProc( LPVOID lpParameter ){population *pop = (population *) lpParameter; //pop 包括所有的計算狀態evaluate_pop (pop);return 0;}// 這個函數要評估所有的80個狀態void evaluate_pop (population *pop){int ind_count; //每個線程正在評估的個體do{ ind_count = thread_pos; // 將全局賦給局部變量evaluate_ind (&(pop->ind[ind_count])); // 調用單個狀態評估函數}while(thread_pos < popsize);return;}void evaluate_ind (individual *ind){int j;WaitForSingleObject(hMutex,INFINITE);thread_pos++; // 全局變量,當前共評估到那個狀態ReleaseMutex(hMutex);// ind->xreal 變量共10個DOUBLE型數據,ind->obj要得到的變量值,共2個// test_problem里面調用了一個DLLtest_problem (ind->xreal, ind->obj);  return;}高手幫忙解答,感謝不盡,在線等,有疑問請回復
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

自己安排線程太累了。
用OMP吧。
#pragma omp parallel for
超級簡單。VS2005以后就有了。
不學就落伍啦。

查看完整回答
反對 回復 2023-03-06
?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

malloc一份新的的參數pop參數傳到TaskThreadProc這個里面

查看完整回答
反對 回復 2023-03-06
  • 2 回答
  • 0 關注
  • 126 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號