必须安排来自粉丝的问题。

两个线程,两个互斥锁如何形成死锁?程序流程图如下:程序流程图如上图所示:在t0处,主线程创建一个子线程并初始化互斥锁互斥对象互斥锁互斥锁1和互斥锁2。

在t1时,主线程适用于互斥锁1,子线程适用于互斥锁2;在t2时,主线程适用于mutex1和mutex2。

线程和子线程都睡眠1秒钟,以防止首先获得时间片的线程直接申请另一个互斥锁,从而导致程序直接退出。

在t3时,主线程和子线程都希望获得彼此手中的互斥体,但是另一方没有时间释放他手中的锁;在t4时,主线程和子线程都进入睡眠状态。

[注意]为了确保主线程和子线程都能分别获得互斥锁互斥锁1和互斥锁2,分别获取锁后它们必须休眠1秒钟,否则,在创建子线程之后,主线程仍有一定的时间片,并且主线程将应用要锁定互斥锁2,将无法形成死锁。

死锁源代码如下:#include #include #include #include unsigned int value1,value2,count; pthread_mutex_tmutex1,mutex2; void * function(void * arg); void * function(void * arg){pthread_mutex_lock(& Mututex2); printf("新线程获取互斥量2 ”);睡眠(1); pthread_mutex_lock(& mutex1); printf(“新线程获取互斥量x1 ”); pthread_mutex_unlock(& mutex1); printf(“新线程发布互斥体x1 ”); pthread_mutex_unlock(& mutex2); printf(“新线程发布互斥体2 ”);返回NULL; int main(int argc,char * argv []){pthread_t a_thread; if(pthread_mutex_init(& mutex1,NULL)0)例如perror(“ _ fail”到-1); if(pthread_mutex_init(& mutex2,NULL)0){perror(“无法互斥_init”);退出(-1); if(pthread_create(& a_thread,NULL,function,pNULL)error(NULL,function,pNULL){perror(“ fail”){0; Exit(-1); while(1)pthread_mutex_lock(& mutex1); printf(“主线程获取静音x1”) ”);睡眠(1); pthread_mutex_lock(& mutex2); printf(“主线程获取互斥x2 ”); pthread_mutex_unlock(& mutex2); printf(“主线程释放互斥体2 ”); pthread_mutex_unlock(& mutex1); printf(“主线程释放互斥体x1 ”); return 0;}可以根据执行结果判断编译和运行。

主线程和子线程已获得互斥锁lockx1,mutex2和sleep 1秒钟。

他们俩都想分别申请互斥锁2和互斥锁1,他们都不希望释放该锁。

该锁已形成死锁,并且该程序处于休眠状态。

检查进程的线程以检查进程ID,并为4204检查该进程创建的线程的ID:4204、4205。

移植调试说明[2]什么是Cortex,ARMv8,ARM体系结构,ARM指令集,SOC?本文将帮助您梳理基本概念[科学]必读[3] Linux面试题100道,请看有多少?必读[4] Modbus协议概念的最详细介绍必读[5] I2C基本知识简介此必读公共帐户所有原始干货均已分类到目录中,单击“干货”。

或答复可用的1024。

如果您想加入嵌入式技术交流小组,请添加一个微信帐户。

您必须回答任何问题。

免责声明:本文的内容是在21ic授权后发布的。

版权属于原始作者。

该平台仅提供信息存储服务。

本文仅代表作者的个人观点,并不代表该平台的立场。

如有任何疑问,请与我们联系,谢谢!