C++ 다중 스레드 동기화 주요 개념: 뮤텍스 잠금: 하나의 스레드에서만 중요 섹션에 액세스할 수 있도록 보장합니다. 조건 변수: 특정 조건이 충족되면 스레드가 활성화될 수 있습니다. 원자성 작업: 공유 변수 수정의 원자성을 보장하기 위한 중단할 수 없는 단일 CPU 명령입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!