linux多线程编程---线程同步之互斥锁
2015-12-18 15:36
731 查看
假设存在这样一个情况:需要N个线程对一个全局的变量进行M次递增操作。首先想到的常常是,使用互斥量。话不多说,看代码:
#include<stdio.h> #include<pthread.h> #define mutex_num <span style="white-space:pre"> </span>10 #define test_count 2000000 static volatile int count=0; pthread_mutex_t mutex; void *fun(void *arg){ int i=0; for(i;i<test_count;++i){ pthread_mutex_lock(&mutex); count++; pthread_mutex_unlock(&mutex); } return NULL; } int main(){ int i=0; pthread_t pthread[mutex_num]; pthread_mutex_init(&mutex,NULL); for(i=0;i<sizeof(pthread)/sizeof(pthread_t);++i){ pthread_create(&pthread[i],NULL,fun,NULL); } for(i=0;i<sizeof(pthread)/sizeof(pthread_t);++i){ pthread_join(pthread[i],NULL); } printf("[%d]\r\n",count); return 0; }
编译、运行程序可以得到正确的结果“count=200000”
至于,为什么count变量要是volatile的,这是避免使用gcc优化选项后直接将M此循环的结果算出,影响了实例代码的显著性。读者可以自己尝试一下:去掉volatile修饰,gcc编译时使用-O2优化,不使用任何同步的情况下(不启用SYNC宏),似乎也能得到正确的结果。
相关文章推荐
- 笔记三:Centos 7 64bit 下JDK的安装与配置
- Linux环境mysql源码安装
- Linux下解决高并发socket最大连接数所受的各种限制(解除IO限制)
- Linux应用帮助你来征服数学学习
- 用十条命令在一分钟内检查Linux服务器性能
- linux系统调用和库函数调用的区别
- CentOS 创建新用户
- Linux下Mysql主从复制(Master-Slave)与读写分离(Amoeba)实践
- 20 Command Line Tools to Monitor Linux Performance
- Hyper-v 安装CentOS
- phpMyAdmin FTP iptables Selinux
- Linux系统下安装rz/sz命令及使用说明
- linux下android开发环境
- TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error:
- Linux 防火墙之iptables/netfilter
- linux根文件系统
- linux信号量全面介绍
- Linux 常用命令
- centos7下的系统网卡名称eno16777736更改为eth0
- Linux指令--diff