MST
星途 面试题库

面试题:并发与同步:互斥锁在多线程场景中的应用

假设有一个多线程程序,多个线程需要访问共享资源。请描述如何使用互斥锁来保证共享资源的安全访问,并且用伪代码展示实现过程。
10.4万 热度难度
操作系统并发与同步

知识考点

AI 面试

面试题答案

一键面试
  1. 互斥锁原理
    • 互斥锁(Mutex,即Mutual Exclusion的缩写)是一种特殊的二元信号量,它只有两种状态:锁定(locked)和解锁(unlocked)。
    • 当一个线程想要访问共享资源时,它首先需要获取互斥锁。如果互斥锁处于解锁状态,该线程可以获取它并将其设置为锁定状态,然后安全地访问共享资源。当线程完成对共享资源的访问后,它必须释放互斥锁,将其状态设置为解锁,以便其他线程可以获取它来访问共享资源。这样可以保证在同一时间只有一个线程能够访问共享资源,从而避免数据竞争和不一致问题。
  2. 伪代码实现
// 定义互斥锁
mutex sharedMutex

// 共享资源
sharedResource

// 线程函数
threadFunction() {
    // 获取互斥锁
    acquire(sharedMutex)
    // 访问共享资源
    access(sharedResource)
    // 释放互斥锁
    release(sharedMutex)
}

在上述伪代码中,acquire 函数用于获取互斥锁,如果互斥锁已经被其他线程锁定,调用 acquire 的线程将被阻塞,直到互斥锁被释放。release 函数用于释放互斥锁,使其他线程有机会获取它。通过这种方式,多个线程对 sharedResource 的访问就可以得到有效的保护。