在Linux C++环境下,可以使用C++11标准库中的<thread>
和<mutex>
来实现多线程同步。以下是一些常用的同步原语:
std::mutex
:互斥锁,用于保护共享数据,防止多个线程同时访问。std::lock_guard
:RAII风格的互斥锁管理类,用于自动管理互斥锁的锁定和解锁。std::unique_lock
:更灵活的互斥锁管理类,支持定时锁定、递归锁定等。std::condition_variable
:条件变量,用于线程间的等待/通知机制。std::atomic
:原子操作,用于实现无锁并发。下面是一个简单的示例,展示了如何使用std::mutex
和std::lock_guard
实现多线程同步:
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
std::mutex mtx; // 全局互斥锁
void print_block(int n, char c) {
std::lock_guard<std::mutex> guard(mtx); // 自动管理互斥锁的锁定和解锁
for (int i = 0; i < n; ++i) {
std::cout << c;
}
std::cout << '\n';
}
int main() {
std::vector<std::thread> threads;
// 创建10个线程,每个线程打印5个字符
for (int i = 0; i < 10; ++i) {
threads.emplace_back(print_block, 5, 'a' + i);
}
// 等待所有线程完成
for (auto& t : threads) {
t.join();
}
return 0;
}
在这个示例中,我们使用了std::mutex
来保护print_block
函数中的共享资源(即std::cout
)。通过使用std::lock_guard
,我们可以确保在离开作用域时自动释放互斥锁,从而避免死锁和其他同步问题。
对于更复杂的同步需求,可以考虑使用std::condition_variable
和std::atomic
等高级同步原语。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
相关推荐:Linux环境下C++多线程怎样实现同步