<aside> 📖 实现同步的方法

不要 “自作聪明” 设计算法,小心求证

</aside>

1. 线程同步


<aside> 📖 同步 (Synchronization)

两个或两个以上随时间变化的量在变化过程中保持一定的相对关系

</aside>

<aside> 📖 线程同步

在某个时间点共同达到互相已知的状态

并发程序的步调很难保持 “完全一致”

</aside>

2. 生产者-消费者问题


99% 的实际并发问题都可以用生产者-消费者解决**。**

<aside> 📖 生产者

生产资源 (任务)、放入队列

</aside>

<aside> 📖 消费者

从队列取出资源 (任务) 执行

</aside>

3. 条件变量 Conditional Variables, CV


任何同步问题都有先来先等待的条件。

条件变量 API

用 CV 实现生产者-消费者问题

void Tproduce() {
  mutex_lock(&lk);
  if (count == n) cond_wait(&cv, &lk);
  printf("("); count++; cond_signal(&cv);
  mutex_unlock(&lk);
}
void Tconsume() {
  mutex_lock(&lk);
  if (count == 0) cond_wait(&cv, &lk);
  printf(")"); count--; cond_signal(&cv);
  mutex_unlock(&lk);
}

打开方式