gcc原子操作与spinlock简单对比
2012-09-29 10:02
316 查看
先看看测试代码
结果:
更多gcc提供的原子操作参考http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html
// cas.c #include <stdio.h> #include <pthread.h> #include <stdlib.h> static int count = 0; void *test_func(void *arg) { int i=0; for(i=0;i<100000;++i){ __sync_fetch_and_add(&count,1); } return NULL; } int main(int argc, const char *argv[]) { pthread_t id[100]; int i = 0; for(i=0;i<100;++i){ pthread_create(&id[i],NULL,test_func,NULL); } for(i=0;i<100;++i){ pthread_join(id[i],NULL); } printf("%d\n",count); return 0; }
// spinlock.c #include <stdio.h> #include <pthread.h> #include <stdlib.h> static int count = 0; static pthread_spinlock_t spinlock; void *test_func(void *arg) { int i=0; for(i=0;i<100000;++i){ pthread_spin_lock (&spinlock); count++; pthread_spin_unlock(&spinlock); } return NULL; } int main(int argc, const char *argv[]) { pthread_t id[100]; int i = 0; pthread_spin_init (&spinlock, 0); for(i=0;i<100;++i){ pthread_create(&id[i],NULL,test_func,NULL); } for(i=0;i<100;++i){ pthread_join(id[i],NULL); } printf("%d\n",count); return 0; }
// mutex.c #include <stdio.h> #include <pthread.h> #include <stdlib.h> static int count = 0; static pthread_mutex_t mutex; void *test_func(void *arg) { int i=0; for(i=0;i<100000;++i){ pthread_mutex_lock (&mutex); count++; pthread_mutex_unlock(&mutex); } return NULL; } int main(int argc, const char *argv[]) { pthread_t id[100]; int i = 0; pthread_mutex_init (&mutex,NULL); for(i=0;i<100;++i){ pthread_create(&id[i],NULL,test_func,NULL); } for(i=0;i<100;++i){ pthread_join(id[i],NULL); } printf("%d\n",count); return 0; }
结果:
# time ./mutex 10000000 real 0m0.235s user 0m0.040s sys 0m0.000s # time ./spinlock 10000000 real 0m0.111s user 0m0.010s sys 0m0.010s # time ./cas 10000000 real 0m0.083s user 0m0.010s sys 0m0.000s
更多gcc提供的原子操作参考http://gcc.gnu.org/onlinedocs/gcc-4.1.1/gcc/Atomic-Builtins.html
相关文章推荐
- gcc原子操作与spinlock简单对比
- gcc原子操作与spinlock简单对比
- gcc命令行计算器项目基础(比bc的操作简单多了)
- GCC 提供的原子操作
- 简单对比最近操作更改的文件
- GCC 提供的原子操作
- GCC 提供的原子操作-__sync_fetch_and_add系列
- GCC 提供的原子操作
- gcc内置原子操作函数
- volatile、mutex、gcc __sync_*原子操作 比较
- GCC数值原子操作API原理及应用
- GCC 提供的原子操作
- gcc内建的原子操作
- GCC提供的原子操作API
- GCC 提供的原子操作
- GCC 提供的原子操作
- gcc 原子操作
- GCC原子操作(Atomic Builtins)
- GCC 提供的原子操作
- GCC 提供的原子操作