阅读量:0
在Linux下使用C++进行并发编程,通常会用到线程库 、互斥锁 、条件变量 等。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。
1. 包含必要的头文件
#include
#include
#include
#include
#include
2. 创建线程
使用 std::thread 类来创建线程。
void threadFunction(int id) {
std::cout << "Thread " << id << " is running\n";
}
int main() {
std::vector threads;
for (int i = 0; i < 5; ++i) {
threads.emplace_back(threadFunction, i);
}
for (auto& t : threads) {
t.join();
}
return 0;
}
3. 使用互斥锁保护共享数据
使用 std::mutex 来保护共享数据,防止数据竞争。
#include
#include
#include
std::mutex mtx;
int sharedData = 0;
void incrementSharedData() {
std::lock_guard lock(mtx) ; // 自动管理锁
++sharedData;
}
int main() {
std::vector 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;
}
4. 使用条件变量进行线程同步
使用 std::condition_variable 来进行线程间的同步。
#include
#include
#include
#include
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void workerThread() {
std::unique_lock 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 lock(mtx) ;
ready = true;
}
cv.notify_one();
}
int main() {
std::thread worker(workerThread);
std::thread triggerThread(trigger);
worker.join();
triggerThread.join();
return 0;
}
5. 使用原子操作
对于简单的数据类型,可以使用 std::atomic 来避免锁的开销。
#include
#include
#include
std::atomic<int> sharedData(0);
void incrementSharedData() {
++sharedData;
}
int main() {
std::vector 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++标准库提供了丰富的工具来帮助你进行并发编程,合理使用这些工具可以提高程序的性能和可靠性。
以上就是关于“如何在Linux下用C++进行并发编程”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm