首页 >后端开发 >C++ >互斥体如何防止多线程编程中的竞争条件?

互斥体如何防止多线程编程中的竞争条件?

Linda Hamilton
Linda Hamilton原创
2024-11-11 15:18:02695浏览

How do Mutexes Prevent Race Conditions in Multithreaded Programming?

互斥量概念:简化教程

互斥量是互斥锁的缩写,可防止多个线程同时访问共享资源。要了解它们的工作原理,请考虑一个类比:

电话亭示例

想象一个带有门把手的电话亭。人们(线程)排队使用电话,但只有抓住门把手的人才能使用。一旦他们放手,另一个人就可以轮到他们了。

在这个类比中:

  • 每个人代表一个线程
  • 门把手代表互斥体
  • 握住门把手代表锁定互斥体
  • 使用手机代表执行受保护的代码.

互斥逻辑

线程通过调用 pthread_mutex_lock(&mutex) 获取互斥锁。这将代码区域标记为该线程独占。

一旦线程完成执行该代码,它就会通过调用 pthread_mutex_unlock(&mutex) 来释放锁。这向其他线程发出信号,表明它们现在可以获取锁并执行受保护的代码。

简单互斥示例

以下 C 11 代码说明了互斥概念:

#include <iostream>
#include <thread>
#include <mutex>

std::mutex m;
int i = 0;

void makeACallFromPhoneBooth() {
    m.lock();  // Thread acquires lock on mutex (grabs door handle)
    std::cout << i << " Hello Wife" << std::endl;  // Protected code
    i++;  // No other thread can modify i while lock is held
    m.unlock();  // Thread releases lock (lets go of door handle)
}

int main() {
    std::thread man1(makeACallFromPhoneBooth);
    std::thread man2(makeACallFromPhoneBooth);
    std::thread man3(makeACallFromPhoneBooth);

    man1.join();
    man2.join();
    man3.join();
    return 0;
}

在此示例中,三个线程(人)尝试使用共享资源(电话)。互斥锁确保一次只有一个线程可以访问资源。

以上是互斥体如何防止多线程编程中的竞争条件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn