То, что вы также можете сделать, это изменить родство дочернего элемента от родительского после fork (). Между прочим, я предполагаю, что вы работаете в Linux, некоторые из этих вещей, такие как получение количества ядер с помощью sysconf (), будут отличаться в разных версиях ОС и Unix .... В этом примере показан процессор родительского процесса и пытается гарантировать, что все дочерние процессы запланированы на другом ядре, в циклическом переборе.
/* get the number of cpu's */
numcpu = sysconf( _SC_NPROCESSORS_ONLN );
/* get our CPU */
CPU_ZERO(&mycpuset);
sched_getaffinity( getpid() , sizeof mycpuset , &mycpuset);
for(i=0 ; i < numcpu ; i++ )
{
if(CPU_ISSET( i, &mycpuset))
{
mycpu = i;
break;
}
}
//...
while(1)
{
//Some other stuff.....
/* now the fork */
if((pid = fork()) == 0)
{
//do your child stuff
}
/* Parent... can schedule child. */
else
{
cpu = ++cpu % numcpu;
if(cpu == mycpu)
cpu = ++cpu % numcpu;
CPU_ZERO(&mycpuset);
CPU_SET(cpu,&mycpuset);
/*set processor affinity*/
sched_setaffinity(pid, sizeof mycpuset, &mycpuset );
//any other father stuff
}
}