nli-distilroberta-base企业应用:与Elasticsearch集成实现语义增强检索
2026/4/26 10:43:42
概念
在多线程环境中,互斥用于保证对临界资源(如全局变量、文件、设备)的排他性访问。当多个线程并发执行时(如th1和th2交替运行),对共享资源的非原子操作(如a++对应的多步汇编指令)可能导致数据不一致。互斥锁通过将临界区代码封装为原子操作(一次线程调度中必须完整执行),确保同一时刻仅有一个线程访问资源。
使用步骤
定义互斥锁
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);解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);销毁锁
int pthread_mutex_destroy(pthread_mutex_t *mutex);概念
同步是互斥的扩展,用于控制线程执行的先后顺序。与互斥锁不同:
th1释放th2的资源)。1(如资源池),支持多线程并发访问。使用步骤
定义信号量
sem_t sem;初始化信号量
int sem_init(sem_t *sem, int pshared, unsigned int value);pshared=0:线程间共享;pshared≠0:进程间共享。value:初始资源数(如二值信号量设为1)。P/V 操作
int sem_wait(sem_t *sem); // 资源不足时阻塞int sem_post(sem_t *sem); // 释放后信号量值 +1销毁信号量
int sem_destroy(sem_t *sem);产生条件
死锁由以下四个必要条件同时满足导致:
预防策略
| 特性 | 互斥锁 | 信号量 |
|---|---|---|
| 资源数量 | 单一资源 | 可多资源(计数信号量) |
| 加解锁主体 | 同一线程 | 可跨线程交叉释放 |
| 适用场景 | 短临界区 | 允许休眠或耗时操作 |