嵌入式开发学习———Linux环境下IO进程线程学习(六)
互斥与同步机制是多线程编程的核心概念。互斥通过互斥锁确保共享资源的独占访问,防止数据竞争。同步则通过信号量和条件变量协调线程执行顺序:信号量控制资源访问数量,支持计数功能;条件变量则在特定条件满足时唤醒等待线程。这些机制配合使用可有效解决多线程环境下的资源竞争问题,保证程序的正确性和高效性。关键实现包括互斥锁的加锁/解锁、信号量的P/V操作以及条件变量的等待/唤醒机制。
·
互斥与同步
互斥:确保多个线程或进程不会同时访问共享资源,避免数据竞争。
同步:协调线程或进程的执行顺序,确保某些操作按预期顺序发生。
互斥锁(Mutex)
用于保护共享资源,同一时间仅允许一个线程访问。
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 加锁
pthread_mutex_lock(&mutex);
// 临界区代码
pthread_mutex_unlock(&mutex);
信号量(Semaphore)
用于控制多线程/进程对资源的访问数量,支持计数。
#include <semaphore.h>
sem_t sem;
sem_init(&sem, 0, 1); // 初始值为1(二进制信号量)
sem_wait(&sem); // P操作(申请资源)
// 临界区代码
sem_post(&sem); // V操作(释放资源)
条件变量(Condition Variable)
用于线程间通信,当某条件满足时唤醒等待的线程。
#include <pthread.h>
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
// 等待条件
pthread_mutex_lock(&mutex);
while (条件不满足) {
pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
// 唤醒等待线程
pthread_cond_signal(&cond); // 唤醒一个线程
// 或 pthread_cond_broadcast(&cond); // 唤醒所有线程


牛客网:

更多推荐



所有评论(0)