Я пытаюсь создать 4 потока для одновременного запуска функции на моих 4 процессорных ядрах. Функция, которую я вызываю, изменит некоторые смещения цикла в зависимости от val
значения переменной.
Я пробовал это, но он не увеличивает счетчик val
должным образом, некоторые потоки сообщают одинаковые значения, кажется, он меняется случайным образом:
int val = 1;
threads[0] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[1] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[2] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
val++;
threads[3] = CreateThread(0, 0, my_thread_1, &val, 0, 0);
Но, похоже, это работает нормально:
int val1 = 1;
int val2 = 2;
int val3 = 3;
int val4 = 4;
threads[0] = CreateThread(0, 0, my_thread_1, &val1, 0, 0);
threads[1] = CreateThread(0, 0, my_thread_1, &val2, 0, 0);
threads[2] = CreateThread(0, 0, my_thread_1, &val3, 0, 0);
threads[3] = CreateThread(0, 0, my_thread_1, &val4, 0, 0);
В чем может быть причина этого, и как это правильно сделать, чтобы дать некоторый параметр потоку?
Это моя функция:
DWORD WINAPI my_thread_1(void *params){
int val = *(int *)params;
...
}