Нужно ли создавать отдельную функция для каждого thread (_beginthread)?

Хочу два идентичных расчета произвести в в двух потоках.
Могу создать функцию для потока универсальную (Вариант 1) или лучше сделать две отдельные функции для каждого потока (Вариант 2).
Вариант 1

void 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));
...
}


Вариант 2

void 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));
...
}


Просто для первого варианта: не будет ли реально выполнятся кусок кода с функцией одновременно? Или он будет скопирован в стек потока?
(Вход-выход данных через аргумент).
  • Вопрос задан
  • 94 просмотра
Решения вопроса 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Одну функцию можно запускать в нескольких потоках.
P.S.
1. Вы уверены что вам нужен _beginthread вместо std::thread?
2. Убедитесь что computeDoneA0 и computeDoneA1 защищены для многопоточного использования.
используйте std::atomic_bool или std::mutex + std::lock_guard для доступа к обычному bool
Ответ написан
@rahmaevao Автор вопроса
Потестил и не багов не нашел.
В общем можно одну функцию описать. Итого Вариант 1 работает.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы