在Linux下使用C++进行并发编程,通常会用到线程库 <thread>
、互斥锁 <mutex>
、条件变量 <condition_variable>
等。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <vector>
使用 std::thread
类来创建线程。
void threadFunction(int id) {
std::cout << "Thread " << id << " is running\n";
}
int main() {
std::vector<std::thread> threads;
for (int i = 0; i < 5; ++i) {
threads.emplace_back(threadFunction, i);
}
for (auto& t : threads) {
t.join();
}
return 0;
}
使用 std::mutex
来保护共享数据,防止数据竞争。
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int sharedData = 0;
void incrementSharedData() {
std::lock_guard<std::mutex> lock(mtx); // 自动管理锁
++sharedData;
}
int main() {
std::vector<std::thread> threads;
for (int i = 0; i < 10; ++i) {
threads.emplace_back(incrementSharedData);
}
for (auto& t : threads) {
t.join();
}
std::cout << "Shared data: " << sharedData << "\n";
return 0;
}
使用 std::condition_variable
来进行线程间的同步。
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void workerThread() {
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });
std::cout << "Worker thread is processing data\n";
}
void trigger() {
std::this_thread::sleep_for(std::chrono::seconds(1));
{
std::lock_guard<std::mutex> lock(mtx);
ready = true;
}
cv.notify_one();
}
int main() {
std::thread worker(workerThread);
std::thread triggerThread(trigger);
worker.join();
triggerThread.join();
return 0;
}
对于简单的数据类型,可以使用 std::atomic
来避免锁的开销。
#include <iostream>
#include <thread>
#include <atomic>
std::atomic<int> sharedData(0);
void incrementSharedData() {
++sharedData;
}
int main() {
std::vector<std::thread> threads;
for (int i = 0; i < 10; ++i) {
threads.emplace_back(incrementSharedData);
}
for (auto& t : threads) {
t.join();
}
std::cout << "Shared data: " << sharedData << "\n";
return 0;
}
以上是一些基本的并发编程概念和示例代码。在实际应用中,你可能需要处理更复杂的并发场景,例如线程池、任务队列、读写锁等。C++标准库提供了丰富的工具来帮助你进行并发编程,合理使用这些工具可以提高程序的性能和可靠性。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读:如何在Linux下用C++进行安全编程