我正在使用C开发一个项目,该项目要求线程运行在与初始进程不同的CPU上。我正在使用pthread库来创建这些线程。我使用sched_setaffinity将主进程固定到cpu。我可以为每个线程执行相同操作以将它们固定到单独的CPU上吗?
我也在掌握主要流程的记忆。在创建pthreads之前调用mlockall(MCL_CURRENT | MCL_FUTURE)是否会锁定pthreads使用的所有内存,或者我是否需要在每个pthread中再次调用它?
提前致谢。
答案 0 :(得分:5)
在Linux上,您有pthread_attr_setaffinity_np
,但由于np
表示这是非便携式,也称为扩展程序。
答案 1 :(得分:3)
内存在进程中的所有线程之间共享,因此每个进程多次调用mlockall是没有意义的。
此外,内存由系统上的所有CPU共享。 mlockall API仅阻止操作系统将进程的内存页写入磁盘,而与将内存锁定到CPU无关。