摘要: static inline int atomic_read(const atomic_t *v){ return (*(volatile int *)&(v)->counter);}防止读取的是寄存器的内容,而内存的值已经被其他线程改变 阅读全文
posted @ 2013-08-31 23:38 阿毛小猪 阅读(3771) 评论(0) 推荐(0) 编辑
摘要: sysconf( )有unistd.h提供,要使用该函数需要#include,其参数可以是_SC_NPROCESSORS_CONF,也可以是_SC_NPROCESSORS_ONLN。sysconf(_SC_NPROCESSORS_CONF)返回系统可以使用的核数,但是其值会包括系统中禁用的核的数目,因此该值并不代表当前系统中可用的核数。而sysconf(_SC_NPROCESSORS_ONLN)的返回值真正的代表了系统当前可用的核数 阅读全文
posted @ 2013-08-31 23:37 阿毛小猪 阅读(632) 评论(1) 推荐(0) 编辑
摘要: 简单地说,CPU 亲和性(affinity) 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性。Linux 内核进程调度器天生就具有被称为 软 CPU 亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。2.6 版本的 Linux 内核还包含了一种机制,它让开发人员可以编程实现 硬 CPU 亲和性(affinity)。这意味着应用程序可以显式地指定进程在哪个(或哪些)处理器上运行。什么是 Linux 内核硬亲和性(affinity)?在 Linux 内核中,所有的进程都有 阅读全文
posted @ 2013-08-31 22:00 阿毛小猪 阅读(401) 评论(0) 推荐(0) 编辑
摘要: 在大多数情况下,编译器和C库透明地帮你处理对齐问题。POSIX 标明了通过malloc( ),calloc( ), 和realloc( )返回的地址对于任何的C类型来说都是对齐的。在Linux中,这些函数返回的地址在32位系统是以8字节为边界对齐,在64位系统是以16字节为边界对齐的。有时候,对于更大的边界,例如页面,程序员需要动态的对齐。虽然动机是多种多样的,但最常见的是直接块I/O的缓存的对齐或者其它的软件对硬件的交互,因此,POSIX 1003.1d提供一个叫做posix_memalign( )的函数:/* one or the other -- either suffices */#d 阅读全文
posted @ 2013-08-31 16:07 阿毛小猪 阅读(886) 评论(0) 推荐(0) 编辑
摘要: Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。pthread_attr_t的主要属性的意义如下:__detachstate,表示新线程是否与进程中其他线程脱离同步,如果设置为PTHREAD_CREATE_DETACHED则新线程不能用pthread_join()来同步,且在退出时自行释放所占用的资源。缺省为PTHREAD_CREATE_JOINABLE状态。这个属性也可以在线程创建并运行以后用pthread_detach()来设置 阅读全文
posted @ 2013-08-31 15:27 阿毛小猪 阅读(344) 评论(0) 推荐(0) 编辑