C++ 中如何创建和管理线程?有哪些线程同步机制?
短信预约 -IT技能 免费直播动态提醒
c++++ 中的线程线程是轻量级的执行单元,可实现并发编程。使用 std::thread 类创建线程,并通过互斥锁、条件变量和自旋锁等同步机制维护共享数据的一致性。实战案例展示了使用线程并发计算求和的过程。
C++ 中的线程创建与管理
线程是轻量级的执行单元,与进程共享相同地址空间,可实现并发编程。
创建线程
在 C++ 中,使用 std::thread
类创建线程:
#include <thread>
void thread_function() {
// 执行线程任务
}
int main() {
std::thread thread(thread_function);
thread.join(); // 阻塞主线程,直到线程执行完毕
return 0;
}
线程同步机制
为维护线程之间的共享数据一致性,需要使用同步机制:
互斥锁(Mutex)
#include <mutex>
std::mutex mutex;
void thread_function() {
std::lock_guard<std::mutex> lock(mutex);
// 对共享数据进行操作
}
条件变量(Condition Variable)
#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; });
// 条件满足时,继续执行
}
自旋锁(Spinlock)
#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++ 中如何创建和管理线程?有哪些线程同步机制?的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341