操作系统 实验29 同步与互斥

1、并发线程同步与互斥

源程序:

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <string.h>
int num=30,count=10;
pthread_mutex_t mylock=PTHREAD_MUTEX_INITIALIZER; 
void *sub1(void *arg) {
    int i = 0,tmp;
    for (; i <count; i++)
    {
		pthread_mutex_lock(&mylock);    			tmp=num-1;
	 	usleep(13);
        	num=tmp;								pthread_mutex_unlock(&mylock);	        		printf("线程1 num减1后值为: %d\n",num);
    }
	return ((void *)0);
}
void *sub2(void *arg){
    int i=0,tmp;
    for(;i<count;i++)
    {
		pthread_mutex_lock(&mylock);
        	tmp=num-1;
	 	usleep(31);
        	num=tmp;
	 	pthread_mutex_unlock(&mylock);
        	printf("线程2 num减1后值为: %d\n",num);
    }
    return ((void *)0);
}
int main(int argc, char** argv) {
    pthread_t tid1,tid2;
    int err,i=0,tmp;
    void *tret;
    err=pthread_create(&tid1,NULL,sub1,NULL);
    if(err!=0)
    {
    	printf("pthread_create error:%s\n",strerror(err));
        exit(-1);
    }
err=pthread_create(&tid2,NULL,sub2,NULL);
    if(err!=0)
    {
    	printf("pthread_create error:%s\n",strerror(err));
        exit(-1);
    }
 for(;i<count;i++)
    {
		pthread_mutex_lock(&mylock);     			tmp=num-1;
		usleep(5);	
     		num=tmp;		
	 	pthread_mutex_unlock(&mylock); 
        	printf("main num减1后值为: %d\n",num);
    }
    printf("两个线程运行结束\n");
    err=pthread_join(tid1,&tret);
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);
    return 0;
}

编译链接命令:gcc threadmutex.c -o threadmutex -lpthread

运行命令:./threadmutex

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值