互斥与同步

互斥:确保多个线程或进程不会同时访问共享资源,避免数据竞争。
同步:协调线程或进程的执行顺序,确保某些操作按预期顺序发生。


互斥锁(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); // 唤醒所有线程

牛客网:

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐