最近遇到一个问题,在子线程中修改main的cpu绑定成功,然后,fork子进程,观察新fork出来的子进程cpu绑定与父进程的修改后的cpu绑定不一致。
经过一番分析,找到了原因:
1)我们使用的线程库是nptl库;
2)在子线程中修改main的cpu绑定,只会修改main线程的cpu绑定,子线程本身的cpu绑定不会发生变化;
3)子线程中fork子进程,子进程继承到的cpu绑定关系来自于子线程。
所以,这个操作与预想不一致的根因,是想当然了。
相要达到子进程修改cpu绑定,可以采用如下方法:
1)先保证fork的主体cpu绑定修改OK,这个用例里面是子线程;
2)在子进程里面自己修改cpu绑定。
在印象中linux线程库,应该是可以使用案例操作OK的,有机会验证下。