Хочу два идентичных расчета произвести в в двух потоках.
Могу создать функцию для потока универсальную (Вариант 1) или лучше сделать две отдельные функции для каждого потока (Вариант 2).
Вариант 1void Target::threadComputeXCorr(void* pParams)
{
ArgsXcorrThread * args = (ArgsXcorrThread *)pParams;
Correlation thisCorrelation = *args->correlation;
*args->xcorrAnswer = thisCorrelation.xcorr(args->serachArea);
*args->computeDone = true;
}
int main(){
...
_beginthread(threadComputeXCorr, 0, &argsA0);
_beginthread(threadComputeXCorr, 0, &argsA1);
while ((computeDoneA0 == false) or (computeDoneA1 == false));
...
}
Вариант 2void Target::threadComputeXCorr0(void* pParams)
{
ArgsXcorrThread * args = (ArgsXcorrThread *)pParams;
Correlation thisCorrelation = *args->correlation;
*args->xcorrAnswer = thisCorrelation.xcorr(args->serachArea);
*args->computeDone = true;
}
void Target::threadComputeXCorr1(void* pParams)
{
ArgsXcorrThread * args = (ArgsXcorrThread *)pParams;
Correlation thisCorrelation = *args->correlation;
*args->xcorrAnswer = thisCorrelation.xcorr(args->serachArea);
*args->computeDone = true;
}
int main(){
...
_beginthread(threadComputeXCorr0, 0, &argsA0);
_beginthread(threadComputeXCorr1, 0, &argsA1);
while ((computeDoneA0 == false) or (computeDoneA1 == false));
...
}
Просто для первого варианта: не будет ли реально выполнятся кусок кода с функцией одновременно? Или он будет скопирован в стек потока?
(Вход-выход данных через аргумент).