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 中国語 Web サイトの他の関連記事を参照してください。