Maison  >  Article  >  développement back-end  >  Comment gérer les ressources partagées en multi-threading en C++ ?

Comment gérer les ressources partagées en multi-threading en C++ ?

WBOY
WBOYoriginal
2024-06-03 10:28:57999parcourir

Utilisez mutex (mutex) en C++ pour gérer les ressources partagées multithread : créez un mutex via std::mutex. Utilisez mtx.lock() pour obtenir un mutex pour un accès exclusif aux ressources partagées. Utilisez mtx.unlock() pour libérer le mutex.

Comment gérer les ressources partagées en multi-threading en C++ ?

Gestion des ressources partagées en multi-threading en C++

Introduction

Dans la programmation multi-thread, lorsque plusieurs threads accèdent simultanément à des ressources partagées, des problèmes de sécurité des threads surviendront. Mutex (mutex) est un mécanisme de synchronisation qui garantit qu'un seul thread peut accéder aux ressources partagées en même temps, empêchant ainsi la concurrence et la corruption des données.

La syntaxe et l'utilisation du mutex

En C++, vous pouvez utiliser std::mutex pour créer un mutex : std::mutex 来创建互斥量:

std::mutex mtx;

要对共享资源进行排他访问,需要使用 lock()unlock()

mtx.lock(); // 获取互斥量
// 对共享资源进行操作
mtx.unlock(); // 释放互斥量

Pour avoir un accès exclusif aux ressources partagées, vous devez utiliser lock() et unlock() :

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

std::mutex mtx;
int shared_resource = 0;

void increment_resource() {
    mtx.lock();
    shared_resource++;
    mtx.unlock();
}

int main() {
    std::vector<std::thread> threads;

    // 创建多个线程并行执行 increment_resource() 函数
    for (int i = 0; i < 1000; i++) {
        threads.push_back(std::thread(increment_resource));
    }

    // 等待所有线程执行完毕
    for (auto& thread : threads) {
        thread.join();
    }

    // 打印共享资源的最终值,此时的值应该是 1000
    std::cout << shared_resource << std::endl;

    return 0;
}
Cas pratique

Ce qui suit est un cas pratique d'utilisation d'un mutex pour protéger des ressources partagées :🎜rrreee

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn