阅读量:3
在Linux中使用C++进行并发编程,你可以使用C++11标准库中提供的线程支持库(),以及同步原语如互斥锁()、条件变量()和原子操作()。以下是一些基本的步骤和示例代码,帮助你开始使用C++进行并发编程。
- 包含必要的头文件:
#include
#include
#include
#include
- 创建线程:
使用
std::thread类来创建一个新的线程。
void helloFunction() {
std::cout << "Hello from a thread!" << std::endl;
}
int main() {
std::thread t(helloFunction);
t.join(); // 等待线程完成
return 0;
}
- 传递参数给线程函数:
void greet(std::string name) {
std::cout << "Hello, " << name << " from a thread!" << std::endl;
}
int main() {
std::thread t(greet, "Alice");
t.join();
return 0;
}
- 线程同步:
使用
std::mutex来保护共享资源,防止数据竞争。
std::mutex mtx; // 全局互斥锁
int shared_data = 0;
void increment() {
mtx.lock(); // 加锁
++shared_data;
mtx.unlock(); // 解锁
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl;
return 0;
}
- 使用RAII管理锁:
使用
std::lock_guard来自动管理锁的生命周期。
void increment() {
std::lock_guard lock(mtx) ; // 自动加锁和解锁
++shared_data;
}
int main() {
// ... 同上
}
- 条件变量:
使用
std::condition_variable来同步线程间的操作。
std::mutex mtx;
std::condition_variable cv;
bool ready = false;
void workerThread() {
std::unique_lock lock(mtx) ;
cv.wait(lock, []{ return ready; }); // 等待直到ready为true
// 执行工作...
}
void trigger() {
std::lock_guard lock(mtx) ;
ready = true;
cv.notify_all(); // 通知所有等待的线程
}
int main() {
std::thread worker(workerThread);
// ... 做一些准备工作 ...
trigger();
worker.join();
return 0;
}
- 原子操作:
使用
std::atomic来进行无需锁的线程安全操作。
std::atomic<int> shared_data(0);
void increment() {
++shared_data; // 原子操作
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl;
return 0;
}
这些是C++并发编程的基础。在实际应用中,你可能需要处理更复杂的同步问题,比如读写锁、屏障、future和promise等。随着你对C++并发编程的深入了解,你可以探索这些高级特性来构建更高效和健壮的多线程应用程序。
以上就是关于“如何在Linux中使用C++进行并发编程”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm