嵌入式开发学习———Linux环境下IO进程线程学习(六)
互斥与同步
互斥:确保多个线程或进程不会同时访问共享资源,避免数据竞争。
同步:协调线程或进程的执行顺序,确保某些操作按预期顺序发生。
互斥锁(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); // 唤醒所有线程
牛客网: