测试:错误检测锁、递归锁。模拟火车

第一题:

代码如下:

 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <stdarg.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <dirent.h>
 #include <sys/wait.h>
 #include <pthread.h>
 #include <semaphore.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <sys/shm.h>
 #include <sys/sem.h>
 #include <arpa/inet.h>
    
pthread_mutex_t mutex;  //定义互斥锁 

void* run(void* arg)
{
	while(1)
	{
    /*	pthread_mutex_unlock(&mutex);
		printf("解锁成功\n");
	*/
    	if(pthread_mutex_lock(&mutex)==-1){
        	printf("上锁失败\n");
    	}
    	else{
        	printf("上锁成功\n");
    	}
		printf("a\n");
		sleep(1);
	}
}

int main(int argc,char* agr[])
{
    //定义(创建)互斥锁属性
    pthread_mutexattr_t mutexattr;
    //初始化互斥锁属性
    pthread_mutexattr_init(&mutexattr);
	//设置互斥锁类型
    if(strcmp(agr[1],"error")==0){
         pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_ERRORCHECK);//错误检查锁
 
    }
    else if(strcmp(agr[1],"rec")==0){
        pthread_mutexattr_settype(&mutexattr,PTHREAD_MUTEX_RECURSIVE);//递归互斥锁
 
    }
	//初始化,不是直接赋值为NULL了
    pthread_mutex_init(&mutex,&mutexattr);   

	pthread_t id;
	pthread_create(&id,0,run,0);
	pthread_detach(id);
	
	while(1)
	{	
   		//第一次上锁 
		if(pthread_mutex_lock(&mutex)==-1){
        	printf("上锁失败\n");
		}        
    	else{
        	printf("上锁成功\n");
    	}

		printf("b\n");
		sleep(1);
	}
    return 0;
}

结果如下:

第二题:

代码如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值