Closed fooofei closed 5 years ago
线程亲和性 进程亲和性 都有
线程: int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t cpuset); int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t cpuset);
int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t mask); int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t mask); taskset 命令行
一个设想: 2 个线程,操作 1 个全局变量,如果设置 2 个线程的亲和性都到一个 CPU 上,是不是用不到加锁了?
这有一份示例代码 https://gist.github.com/isayme/4222072
问题 1 线程函数的参数是局部变量地址,即 &i,这个会在多个线程间共享,需要被保护。
问题 2 sched_setaffinity() 与 pthread_setaffinity_np() API 区别
线程亲和性 进程亲和性 都有
线程: int pthread_setaffinity_np(pthread_t thread, size_t cpusetsize, const cpu_set_t cpuset); int pthread_getaffinity_np(pthread_t thread, size_t cpusetsize, cpu_set_t cpuset);
int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t mask); int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t mask); taskset 命令行