关于线程同步互斥

说一说你理解的线程同步

线程同步是在多线程的环境下应用的机制,用于防止多个线程同时访问共享资源而导致数据竞争的问题。

通常实现线程同步的方式有互斥锁、条件变量等实现。

互斥锁的作用主要就是确保任意时刻只有能有一个线程能够获得对资源的访问权,当某一个线程获得了锁资源,其他线程要进行等待,直到那个线程释放锁资源。

条件变量的作用就是等待和唤醒机制。刚才说了其他线程可能会进行等待,那锁资源空闲的时候就需要有一种方式去通知某个线程,去唤醒它们进行锁资源的竞争。

这两个操作在线程同步中是相辅相成的,因为条件变量的等待唤醒机制是不提供线程访问限制,那就会造成最开始的数据竞争的结果,所以需要互斥锁。而仅仅只有互斥锁的话就无法做到等待和唤醒的操作,所以说它们不是独善其身的。。

因为互斥锁本身的获取和释放就是原子的,也就是说获取锁和释放锁是紧紧锁死的一对操作,所以就不用担心互斥锁本身的资源竞争问题。 在这个阶段起到了对共享资源的保护作用。比如某一个线程在释放锁的过程中,另一个线程想获取锁,那是不可能的,这就保证了锁资源的同步性,进而保证共享资源的同步性。

条件变量的常用接口就是:初始化、等待、唤醒、销毁。这些接口都是要带有互斥锁的,因为前面说过它们是相辅相成的。比如signal唤醒第一个等待的线程,broadcast唤醒一批线程。

更深层次地说,条件变量其实是一个结构体,里面包含有一个等待队列,里面存放的是在该条件变量下等待的所有线程

你可能感兴趣的:(操作系统面经,开发语言)