您的位置:首页 > 运维架构 > Linux

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息