>  기사  >  백엔드 개발  >  C++ 멀티스레드 프로그래밍의 핵심 개념은 스레드를 동기화하는 방법입니다.

C++ 멀티스레드 프로그래밍의 핵심 개념은 스레드를 동기화하는 방법입니다.

WBOY
WBOY원래의
2024-06-03 11:55:56458검색

C++ 다중 스레드 동기화 주요 개념: 뮤텍스 잠금: 하나의 스레드에서만 중요 섹션에 액세스할 수 있도록 보장합니다. 조건 변수: 특정 조건이 충족되면 스레드가 활성화될 수 있습니다. 원자성 작업: 공유 변수 수정의 원자성을 보장하기 위한 중단할 수 없는 단일 CPU 명령입니다.

C++ 多线程编程的关键概念是如何同步线程的?

C++ 다중 스레드 프로그래밍의 주요 개념: 스레드 동기화

스레드 동기화는 다중 스레드 프로그래밍의 중요한 부분으로, 여러 스레드가 공유 리소스에 안전하게 액세스하고 경합 및 데이터 손상을 방지할 수 있습니다. 다음은 C++의 스레드 동기화에 대한 주요 개념을 소개합니다.

Mutex:

Mutex(뮤텍스)는 한 번에 하나의 스레드만 임계 섹션에 액세스할 수 있도록 허용하는 액세스 제어 메커니즘입니다. 즉, 동기 액세스가 필요합니다. 코드 영역. 뮤텍스 잠금을 사용하면 여러 스레드가 동시에 공유 변수를 수정하여 데이터 손상을 일으키는 것을 방지할 수 있습니다.

std::mutex mtx;  // 定义互斥锁对象

void someFunction() {
    std::lock_guard<std::mutex> lock(mtx);  // 在进入临界区前加锁
    // 访问临界区代码
}

조건 변수:

조건 변수를 사용하면 특정 조건이 충족될 때 스레드를 깨울 수 있습니다. 이는 한 스레드가 다른 스레드가 데이터를 생성하기를 기다리는 경우와 같은 협력적 다중 스레드 프로그래밍에 유용합니다.

std::condition_variable cv;  // 定义条件变量对象
std::mutex mtx;  // 关联的互斥锁对象

void produce() {
    std::lock_guard<std::mutex> lock(mtx);  // 加锁
    // 产生数据
    cv.notify_all();  // 通知所有等待此条件的线程
}

void consume() {
    std::unique_lock<std::mutex> lock(mtx);  // 加锁
    cv.wait(lock);  // 等待 `produce()` 函数生产数据
    // 消费数据
}

원자적 연산:

원자적 연산은 다른 스레드에 의해 중단될 수 없는 단일 CPU 명령어로, 공유 변수에 대한 수정이 원자적임을 보장합니다.

std::atomic<int> count;  // 定义原子变量

void incrementCount() {
    count++;  // 原子方式增加 `count`
}

실용 사례:

다음 다중 스레드 프로그램을 고려하십시오.

std::vector<int> numbers;  // 共享的整型数组

void addNumber(int n) {
    numbers.push_back(n);
}

int main() {
    std::thread t1(addNumber, 1);
    std::thread t2(addNumber, 2);
    t1.join();
    t2.join();
    
    std::cout << "Numbers in the vector: ";
    for (int n : numbers) {
        std::cout << n << " ";
    }
    std::cout << std::endl;
    
    return 0;
}

이 예에서 numbers 배열은 여러 스레드가 동시에 액세스할 수 있는 공유 리소스입니다. 동기화 조치를 취하지 않으면 경쟁 조건이 발생하여 데이터가 손상될 수 있습니다.

배열에 안전하게 액세스하려면 뮤텍스 잠금을 사용할 수 있습니다.

void addNumber(int n) {
    std::lock_guard<std::mutex> lock(mtx);  // 在访问数组前加锁
    numbers.push_back(n);
}

이런 방식으로 한 번에 하나의 스레드만 배열에 액세스할 수 있어 데이터 무결성이 보장됩니다.

출력:

Numbers in the vector: 1 2 

위 내용은 C++ 멀티스레드 프로그래밍의 핵심 개념은 스레드를 동기화하는 방법입니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.