C を使用して効率的な同時プログラミングを行うにはどうすればよいですか?
はじめに:
コンピュータ システムの発展、マルチコア テクノロジの普及、および高度な同時処理の需要の増加に伴い、同時プログラミングの重要性がますます高まっています。 C は、同時プログラミング ツールとライブラリの豊富なセットを備えた強力なプログラミング言語です。この記事では、C を使用して効率的な同時プログラミングを行う方法を説明し、いくつかのサンプル コードを提供します。
1. スレッドとスレッド管理:
std を通じて
ヘッダー ファイルが導入されました。 ::thread
クラスを使用すると、新しいスレッドを簡単に作成できます。以下はスレッドを作成するサンプル コードです: #include <iostream> #include <thread> void myFunction() { std::cout << "This is a new thread." << std::endl; } int main() { std::thread t(myFunction); // 创建一个新线程 t.join(); // 主线程等待新线程执行完毕 return 0; }
std::thread
クラスのインスタンスは join()# できます。 ## または
detach() の場合、
join() を呼び出すと、メインスレッドはスレッドの実行が完了するまで待機しますが、
detach() は新しいスレッドがバックグラウンドで実行されます。以下はスレッド管理のサンプルコードです。
#include <iostream> #include <thread> void myFunction() { std::cout << "This is a new thread." << std::endl; } int main() { std::thread t(myFunction); // 创建一个新线程 t.detach(); // 将线程设置为后台运行 // 主线程可以继续执行其他任务 return 0; }
#include <iostream> #include <thread> #include <mutex> std::mutex mtx; // 创建互斥锁 void myFunction() { mtx.lock(); // 加锁 std::cout << "This is a critical section." << std::endl; mtx.unlock(); // 解锁 } int main() { std::thread t1(myFunction); std::thread t2(myFunction); t1.join(); t2.join(); return 0; }
#include <iostream> #include <thread> #include <mutex> #include <condition_variable> std::mutex mtx; // 创建互斥锁 std::condition_variable cv; // 创建条件变量 bool ready = false; // 条件 void myFunction() { std::unique_lock<std::mutex> ul(mtx); cv.wait(ul, []{ return ready; }); // 阻塞线程直到满足条件 std::cout << "This is a new thread." << std::endl; } int main() { std::thread t(myFunction); { std::lock_guard<std::mutex> lg(mtx); ready = true; } cv.notify_one(); // 唤醒等待条件的线程 t.join(); return 0; }
C 11 では、## を含む共有データへのマルチスレッド アクセスの問題を解決するために、複数の同時コンテナが導入されています。 #std::vector
、std::map
、std::queue
など。以下は、並行コンテナを使用したサンプル コードです。 <pre class='brush:cpp;toolbar:false;'>#include <iostream>
#include <thread>
#include <vector>
std::vector<int> sharedVector; // 共享容器
std::mutex mtx; // 创建互斥锁
void producer() {
for (int i = 0; i < 10; ++i) {
std::lock_guard<std::mutex> lg(mtx);
sharedVector.push_back(i);
}
}
void consumer() {
for (int i = 0; i < 10; ++i) {
std::lock_guard<std::mutex> lg(mtx);
if (!sharedVector.empty()) {
std::cout << sharedVector.back() << std::endl;
sharedVector.pop_back();
}
}
}
int main() {
std::thread t1(producer);
std::thread t2(consumer);
t1.join();
t2.join();
return 0;
}</pre>
結論:
リファレンス:
C リファレンス -
C リファレンス -
以上がC++ を使用して効率的な同時プログラミングを行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。