pthread on-wakeup执行

每次内核重新安排时,如何让我的pthread执行一个函数

我需要确定我的线程正在安排在哪个物理cpu /套接字(不是逻辑核心),并且不能一直这样做.

只有当线程实际被重新安排时,唤醒例程是否可以以某种方式挂钩以对TLS进行必要的更新?

至于为什么我需要这个:我有每个线程每70ns执行AMO appx代码,如果地址没有缓存在另一个套接字上就没问题,在两个套接字上部署相同的代码会因频繁的缓存失效而产生15倍的性能影响.我打算为此分配内存,这只在运行相同L3缓存的线程之间共享.所以我需要确定我正在运行哪个套接字并解决正确的内存块.我显然可以调用sched_getcpu并将其与/ proc / cpuinfo中的物理cpu ID进行比较,但这是一个相当大的开销.我不能为每个线程分配线程专用内存,但是太贵了.

解决方法

从我在 Linux Kernel Development,Third Edition中读到的内容来看,内核提供的服务和接口都不是你想要的.使用pthread_setaffinity(如上面的@osgx所建议,或者,在最近的Linux内核实现中,pthread_setaffinity_np)或者在开始时为每个cpu套接字缓存一个TLS密钥(如上面@caf所建议的那样)可能是在这个方向上使用的最佳方法.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...