测试:错误检测锁、递归锁是否会造成死锁

第一题:

代码如下:

 #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;
}

结果如下:

第二题:

代码如下:

结果如下: 

相关推荐

  1. WPF Dispatcher使用invoke造成

    2024-07-19 21:36:02       32 阅读
  2. linux 内核检测

    2024-07-19 21:36:02       35 阅读
  3. 2024-07-19 21:36:02       43 阅读
  4. linux互斥,非用法详解

    2024-07-19 21:36:02       51 阅读
  5. c++ 检测与内存泄露

    2024-07-19 21:36:02       26 阅读
  6. 以及如何避免

    2024-07-19 21:36:02       34 阅读
  7. 资源、、如何监测

    2024-07-19 21:36:02       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-19 21:36:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-19 21:36:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-19 21:36:02       57 阅读
  4. Python语言-面向对象

    2024-07-19 21:36:02       68 阅读

热门阅读

  1. 聊聊Nodejs

    2024-07-19 21:36:02       20 阅读
  2. k8s二次开发-kubebuiler一键式生成deployment,svc,ingress

    2024-07-19 21:36:02       14 阅读
  3. k8s系列问题:[ERROR Port-10250]: Port 10250 is in use

    2024-07-19 21:36:02       14 阅读
  4. AI驱动的漏洞检测

    2024-07-19 21:36:02       20 阅读
  5. 一个简单的springboot应用搭建过程

    2024-07-19 21:36:02       16 阅读
  6. POST请求查询参数神奇失效的一次神奇bug之旅

    2024-07-19 21:36:02       15 阅读
  7. 智能家居和智能家电有什么区别?

    2024-07-19 21:36:02       20 阅读
  8. Leetcode 9. 回文数

    2024-07-19 21:36:02       20 阅读
  9. final字段总结

    2024-07-19 21:36:02       14 阅读