资讯详情

自学嵌入式Day29:Linux多线程控制(互斥锁、信号量与死锁)

📅 2026/10/31 2:14:56 | 华诺云谱 👁 阅读
自学嵌入式Day29:Linux多线程控制(互斥锁、信号量与死锁)
目录一、线程互斥Mutex1. 核心概念2. 互斥锁的使用步骤3. 相关 API 函数4. 互斥锁的注意事项二、线程同步Semaphore1. 核心概念2. 互斥锁 vs 信号量重点区分3. 信号量的使用步骤4. 相关函数三、死锁Deadlock1. 什么是死锁2. 产生死锁的四个必要条件缺一不可一、线程互斥Mutex1. 核心概念临界资源在多线程中会被多个线程同时进行读写操作的资源如全局变量、文件、硬件设备等。互斥Mutual Exclusion在多线程中对临界资源的排他性访问。即同一时刻只能有一个线程访问该资源。2. 互斥锁的使用步骤定义锁 →→ 初始化锁 →→ 加锁 →→ 解锁 →→ 销毁锁3. 相关 API 函数使用互斥锁需包含头文件pthread.h。定义与初始化pthread_mutex_t mutex; // 定义互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); // 功能初始化互斥锁。 // 参数attr 一般传 NULL表示默认属性。 // 返回值成功 0失败 非零。加锁int pthread_mutex_lock(pthread_mutex_t *mutex); // 功能加锁。加锁后的代码到解锁部分的代码属于“原子操作”。 // 如果 mutex 已经被其他线程锁住当前线程会在这里阻塞等待。原子操作在线程的一次调度中这段代码必须完成不能中途发生线程调度。解锁int pthread_mutex_unlock(pthread_mutex_t *mutex); // 功能解锁。解锁后代码不再排他访问。销毁int pthread_mutex_destroy(pthread_mutex_t *mutex); // 功能使用完毕后销毁锁释放资源。4. 互斥锁的注意事项谁加锁谁解锁互斥锁的加锁和解锁必须在同一个线程中进行。临界区要“短小精悍”在被互斥锁保护的代码段临界区内绝对不要执行休眠sleep或耗时极长的操作否则会导致其他线程长时间阻塞严重影响并发效率。二、线程同步Semaphore1. 核心概念同步有一定先后顺序的对资源的排他性访问。关系互斥包含同步同步是互斥的一个特例。2. 互斥锁 vs 信号量重点区分持有者互斥锁有持有者的概念谁加锁谁解锁信号量没有持有者可以由线程 A 释放、线程 B 申请th1 释放 th2th2 释放 th1交叉释放。临界区限制互斥锁保护的临界区不能休眠而信号量保护的区域适当可以有休眠或小的耗时操作。资源数互斥锁资源唯一信号量是计数信号量其初值可以大于 1适用于有多个相同资源的情况。3. 信号量的使用步骤定义信号量 →→ 初始化 →→ P/V 操作 →→ 销毁。4. 相关函数使用信号量需包含头文件semaphore.h。定义与初始化sem_t sem; // 定义信号量 int sem_init(sem_t *sem, int pshared, unsigned int value); // 功能初始化信号量。 // 参数pshared 0 表示线程间使用!0 表示进程间使用。 // value 是初始值。二值信号量(0 或 1)0表示红灯阻塞1表示绿灯通行。P/V 操作P 操作申请资源对应sem_wait()。如果有资源申请并执行sem sem - 1如果没有资源阻塞等待。int sem_wait(sem_t *sem);V 操作释放资源对应sem_post()。释放资源并执行sem sem 1不会阻塞。int sem_post(sem_t *sem);销毁int sem_destroy(sem_t *sem);三、死锁Deadlock1. 什么是死锁由于锁资源安排不合理申请和释放逻辑不对导致多个进程或线程互相等待对方释放资源从而无法继续执行推进的现象。2. 产生死锁的四个必要条件缺一不可这是计算机科学中非常经典的考点互斥条件一个资源每次只能被一个进程使用。请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放。不剥夺条件进程已获得的资源在未使用完之前不能强行剥夺。循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系。破局之法我们在写代码时只要破坏上述四个条件中的任意一个例如规定所有线程按相同的顺序申请锁就可以避免死锁。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑