linux系统中的多线程互斥量操作demon
2015-12-22 06:54
459 查看
/* date:2015.12.22 author:wxs demon:pthread using demon commd:gcc -o pthread0 pthread0.c -L /usr/lib/i386-linux-gnu/libpthread.a -lpthread */ #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <unistd.h> #include <string.h> int num=0; int num_temp=0; pthread_mutex_t mylock;//互斥量存在于内核中,一般定义为全局变量 //pthread_mutex_t mylock=PTHREAD_MUTEX_INITIALIZER;//第一种:赋值为常量PTHREAD_MUTEX_INITIALIZER初始化多线程互斥量 //int pthread_mutex_init (pthread_mutex_t *__mutex, __const pthread_mutexattr_t *__mutexattr); //int pthread_mutex_destroy (pthread_mutex_t *__mutex);//第二种:使用pthread_mutex_init函数进行初始化多线程互斥量(动态分配)再使用pthread_mutex_destroy函数销毁 //保护读写共享资源线程:线程加解锁,加锁调用pthread_mutex_lock,解锁调用pthread_mutex_unlock void *add(void *arg) {//线程执行函数,执行300次加法 int i = 0,tmp; pthread_mutex_lock(&mylock); for (; i <300; i++) { tmp=num_temp+1; num_temp=tmp; //sleep(1); printf("add+1,result is:%d\n",num_temp); } pthread_mutex_unlock(&mylock); return ((void *)0); } void *sub(void *arg)//线程执行函数,执行300次减法 { int i=0,tmp; pthread_mutex_lock(&mylock); for(;i<300;i++) { tmp=num-1; num=tmp; //sleep(1); printf("sub-1,result is:%d\n",num); } pthread_mutex_unlock(&mylock); return ((void *)0); } int main(int argc, char** argv) { pthread_t tid1,tid2; int err; void *tret; pthread_mutex_init(&mylock,NULL); err=pthread_create(&tid1,NULL,add,NULL);//创建线程 if(err!=0) { printf("pthread_create error:%s\n",strerror(err)); exit(-1); } err=pthread_create(&tid2,NULL,sub,NULL); if(err!=0) { printf("pthread_create error:%s\n",strerror(err)); exit(-1); } err=pthread_join(tid1,&tret);//阻塞等待线程id为tid1的线程,直到该线程退出 if(err!=0) { printf("can not join with thread1:%s\n",strerror(err)); exit(-1); } printf("thread 1 exit code %d\n",(int)tret); err=pthread_join(tid2,&tret); if(err!=0) { printf("can not join with thread1:%s\n",strerror(err)); exit(-1); } printf("thread 2 exit code %d\n",(int)tret); pthread_mutex_destroy (&mylock); return 0; }
相关文章推荐
- Linux socket 初步
- Python3写爬虫(四)多线程实现数据爬取
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝