C语言中,线程同步与互斥的四种方式有哪些,如何对比和适用不同场景?

2026-05-21 08:503阅读0评论运维
  • 内容介绍
  • 文章标签
  • 相关推荐

序章——别让线程把你逼疯

我懂了。 先说个实话:在C语言里搞并发, 你要么被锁住得像粘在墙上的海报,要么被原子操作拽得像坐过山车。别指望一套公式能把所有场景都装进盒子, 四大同步神器各有脾气,配合不当就会炸毛。

1️⃣ 互斥量——最常见的“老爷爷”

互斥量是最直接的独占锁,一把钥匙只能给一个线程打开临界区。代码里常见的写法:

C++中线程同步与互斥的4种方式介绍、对比、场景举例
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void *worker{
    pthread_mutex_lock;
    // … 访问共享资源 …
    pthread_mutex_unlock;
    return NULL;
}

优点:实现简单、 兼容性好;缺点:粒度太粗,锁竞争激烈时会让CPU像被绳子拴住一样喘不过气。

2️⃣ 条件变量——爱哭爱闹的“闹钟”

条件变量本身不提供互斥, 只是配合互斥量使用,让线程在特定条件满足前“睡大觉”。一旦条件触发,就会被唤醒继续抢资源,闹乌龙。。

阅读全文

序章——别让线程把你逼疯

我懂了。 先说个实话:在C语言里搞并发, 你要么被锁住得像粘在墙上的海报,要么被原子操作拽得像坐过山车。别指望一套公式能把所有场景都装进盒子, 四大同步神器各有脾气,配合不当就会炸毛。

1️⃣ 互斥量——最常见的“老爷爷”

互斥量是最直接的独占锁,一把钥匙只能给一个线程打开临界区。代码里常见的写法:

C++中线程同步与互斥的4种方式介绍、对比、场景举例
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
void *worker{
    pthread_mutex_lock;
    // … 访问共享资源 …
    pthread_mutex_unlock;
    return NULL;
}

优点:实现简单、 兼容性好;缺点:粒度太粗,锁竞争激烈时会让CPU像被绳子拴住一样喘不过气。

2️⃣ 条件变量——爱哭爱闹的“闹钟”

条件变量本身不提供互斥, 只是配合互斥量使用,让线程在特定条件满足前“睡大觉”。一旦条件触发,就会被唤醒继续抢资源,闹乌龙。。

阅读全文