锁和信号量最大的区别就是:锁严格要求 “谁占用谁释放”,而信号量允许 “一个任务 / 线程释放,另一个任务 / 线程获取”。
特性 | 互斥锁(Mutex) | POSIX 信号量(Semaphore) |
---|---|---|
初始状态 | 初始为 “锁定”(PTHREAD_MUTEX_INITIALIZER ),需显式获取(pthread_mutex_lock )。 | 初始值可自定义: - 用于互斥时初始值为 1(二进制信号量); - 用于限制资源数量时初始值为 N(如 3 表示 3 个资源)。 |
核心操作 | - pthread_mutex_lock :获取锁(若已被占用则阻塞);- pthread_mutex_unlock :释放锁(仅持有者可调用)。 | - sem_wait :计数器减 1(若为 0 则阻塞);- sem_post :计数器加 1(唤醒等待线程)。 |
计数器逻辑 | 无显式计数器,仅通过 “锁定 / 解锁” |