在 Linux 中,C++11 提供了对线程间安全通信的支持,主要通过原子操作(atomic operations)和互斥锁(mutexes)来实现
<atomic>
头文件,其中包含了一系列原子类型和操作。使用原子操作可以确保线程间的安全通信,例如:#include <atomic>
#include <thread>
std::atomic<int> shared_data(0);
void thread_func() {
for (int i = 0; i < 1000; ++i) {
shared_data.fetch_add(1);
}
}
int main() {
std::thread t1(thread_func);
std::thread t2(thread_func);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data.load() << std::endl; // 输出 2000
return 0;
}
<mutex>
头文件,其中包含了一系列互斥锁相关的类和函数。使用互斥锁可以确保线程间的安全通信,例如:#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_data = 0;
void thread_func() {
for (int i = 0; i < 1000; ++i) {
std::lock_guard<std::mutex> lock(mtx);
shared_data++;
}
}
int main() {
std::thread t1(thread_func);
std::thread t2(thread_func);
t1.join();
t2.join();
std::cout << "Shared data: " << shared_data << std::endl; // 输出 2000
return 0;
}
在这个例子中,我们使用 std::lock_guard
来自动管理互斥锁的生命周期。当 std::lock_guard
对象被创建时,它会自动锁定互斥锁,当对象被销毁时(例如,离开作用域时),它会自动解锁互斥锁。这样可以确保在多线程环境下对共享资源的访问是线程安全的。
除了原子操作和互斥锁之外,还有其他线程间安全通信的方法,例如条件变量(condition variables)和读写锁(read-write locks)。在实际应用中,可以根据具体需求选择合适的方法来实现线程间的安全通信。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。