Вот как я решил эту проблему. До сих пор, похоже, не было никаких проблем с этим:
int thread_create_in_C_FC(numberOfProcessors) {
pthread_t threads[numberOfProcessors+1];
pthread_attr_t attr;
cpu_set_t cpus;
pthread_attr_init(&attr);
for (int i = 0; i < numberOfProcessors; i++) {
CPU_ZERO(&cpus);
CPU_SET(i, &cpus);
printf("Core created %d\n", i);
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &cpus);
if (i > 0){
printf("Thread created %d\n", i);
pthread_create(&threads[i+1], &attr, Thread_Process2, NULL); }
if (i == 0){ //Core 0 Thread 1
printf("Final thread created %d\n", i);
pthread_create(&threads[i], &attr, Thread_Process1, NULL);
pthread_create(&threads[i+1], &attr, Thread_Process1, NULL);}
}
for (int i = 0; i < numberOfProcessors+1; i++) {
pthread_join(threads[i], NULL);
printf("Core joined %d\n", i);
}
return numberOfProcessors;
}
В нескольких точках выше я добавил 1 к счету, как показано цветовой кодировкой, которую вы видите, если вы находитесь на Стек переполнен темным режимом.
Если я обнаружу какие-либо проблемы после работы с ним, я обновлю этот ответ. Но это выглядит как правильный способ сделать это, потому что теперь я получаю два потока, назначенные ядру 0, а другие - более высокие номера ядра.