C++의 스레드 스레드는 동시 프로그래밍을 가능하게 하는 경량 실행 단위입니다. std::thread 클래스를 사용하여 스레드를 생성하고 뮤텍스 잠금, 조건 변수 및 스핀 잠금과 같은 동기화 메커니즘을 통해 공유 데이터의 일관성을 유지합니다. 실제 사례에서는 스레드를 사용하여 동시에 합계를 계산하는 프로세스를 보여줍니다.
스레드는 프로세스와 동일한 주소 공간을 공유하여 동시 프로그래밍을 가능하게 하는 경량 실행 단위입니다.
C++에서는 std::thread
클래스를 사용하여 스레드를 만듭니다.
#include <thread> void thread_function() { // 执行线程任务 } int main() { std::thread thread(thread_function); thread.join(); // 阻塞主线程,直到线程执行完毕 return 0; }
스레드 간 공유 데이터의 일관성을 유지하려면 동기화 메커니즘을 사용해야 합니다.
#include <mutex> std::mutex mutex; void thread_function() { std::lock_guard<std::mutex> lock(mutex); // 对共享数据进行操作 }
#include <condition_variable> std::condition_variable cv; std::mutex cv_mutex; void thread_function() { std::unique_lock<std::mutex> lock(cv_mutex); cv.wait(lock, [] { return condition_is_met; }); // 条件满足时,继续执行 }
#include <atomic> std::atomic_flag spinlock = ATOMIC_FLAG_INIT; void thread_function() { while (spinlock.test_and_set(std::memory_order_acquire)); // 对共享数据进行操作 spinlock.clear(std::memory_order_release); }
동시 계산 및 합산
#include <thread> #include <vector> std::mutex sum_mutex; long long sum = 0; void add_numbers(const std::vector<int>& numbers) { for (int num : numbers) { std::lock_guard<std::mutex> lock(sum_mutex); sum += num; } } int main() { std::vector<std::thread> threads; std::vector<int> numbers = {...}; // 要相加的数字列表 // 创建并执行线程 for (size_t i = 0; i < std::thread::hardware_concurrency(); i++) { threads.emplace_back(add_numbers, numbers); } // 等待所有线程结束 for (auto& thread : threads) { thread.join(); } std::cout << "Sum: " << sum << std::endl; return 0; }
위 내용은 C++에서 스레드를 생성하고 관리하는 방법은 무엇입니까? 어떤 스레드 동기화 메커니즘이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!