跳到主要内容

同步错误与信号量

同步错误是怎样产生的?​

  • 场景: 多个线程并发操作同一个共享变量;
  • 原因: CPU 执行指令的先后顺序不确定, 交错方式不同会得到不同结果;
  • 结果: 最终值不可预测;

进度图怎样判断并发是否正确?​

  • 构造: 把 n 个线程的执行过程表示为 n 维笛卡尔空间中的轨迹线;
  • 安全轨迹线: 不会引起同步错误的轨迹线;
  • 用途: 用轨迹线是否安全来判断某个同步方案是否可行;

信号量为什么能保证安全轨迹线?​

  • 信号量: 一种同步原语, 用于约束多个线程推进的顺序;
  • 作用: 通过对临界区的互斥进入, 使轨迹线避开会引起错误交错的区域;

什么是线程安全函数?​

  • 定义: 被多个并发线程反复调用时, 总能产生正确结果的函数;
  • 判定: 结果不依赖线程之间的相对执行顺序;

什么是可重入性?​

  • 定义: 被多个并发线程调用时, 不共享任何函数内部数据的线程安全函数;
  • 关系: 可重入性比线程安全更强, 可重入函数一定线程安全;

竞争是什么?​

  • 定义: 一个线程要求在自己控制流的 x 点之前, 另一个线程先到达 y 点;
  • 表现: 程序的正确性依赖两个线程的相对推进速度;
  • 归类: 属于同步错误;

死锁是怎样发生的?​

  • 起因: 线程之间通过信号量互相等待对方持有的资源;
  • 定义: 线程被永久堵塞, 等待一个永远不会为真的条件;