c++++ 中的线程线程是轻量级的执行单元,可实现并发编程。使用 std::thread 类创建线程,并通过互斥锁、条件变量和自旋锁等同步机制维护共享数据的一致性。实战案例展示了使用线程
c++++ 中的线程线程是轻量级的执行单元,可实现并发编程。使用 std::thread 类创建线程,并通过互斥锁、条件变量和自旋锁等同步机制维护共享数据的一致性。实战案例展示了使用线程并发计算求和的过程。
线程是轻量级的执行单元,与进程共享相同地址空间,可实现并发编程。
在 C++ 中,使用 std::thread
类创建线程:
#include <thread>
void thread_function() {
// 执行线程任务
}
int main() {
std::thread thread(thread_function);
thread.join(); // 阻塞主线程,直到线程执行完毕
return 0;
}
为维护线程之间的共享数据一致性,需要使用同步机制:
#include <mutex>
std::mutex mutex;
void thread_function() {
std::lock_guard<std::mutex> lock(mutex);
// 对共享数据进行操作
}
#include <condition_variable>
std::condition_variable cv;
std::mutex cv_mutex;
void thread_function() {
std::unique_lock<std::mutex> lock(cv_mutex);
cv.wait(lock, [] { return condition_is_met; });
// 条件满足时,继续执行
}
#include <atomic>
std::atomic_flag spinlock = ATOMIC_FLAG_INIT;
void thread_function() {
while (spinlock.test_and_set(std::memory_order_acquire));
// 对共享数据进行操作
spinlock.clear(std::memory_order_release);
}
并发计算求和
#include <thread>
#include <vector>
std::mutex sum_mutex;
long long sum = 0;
void add_numbers(const std::vector<int>& numbers) {
for (int num : numbers) {
std::lock_guard<std::mutex> lock(sum_mutex);
sum += num;
}
}
int main() {
std::vector<std::thread> threads;
std::vector<int> numbers = {...}; // 要相加的数字列表
// 创建并执行线程
for (size_t i = 0; i < std::thread::hardware_concurrency(); i++) {
threads.emplace_back(add_numbers, numbers);
}
// 等待所有线程结束
for (auto& thread : threads) {
thread.join();
}
std::cout << "Sum: " << sum << std::endl;
return 0;
}
以上就是C++ 中如何创建和管理线程?有哪些线程同步机制?的详细内容,更多请关注编程网其它相关文章!
--结束END--
本文标题: C++ 中如何创建和管理线程?有哪些线程同步机制?
本文链接: https://www.lsjlt.com/news/613827.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
2024-05-16
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0