当前位置: 首页 > wzjs >正文

下载汽车网站制作网站一键优化软件

下载汽车网站制作网站,一键优化软件,定陶区城乡建设局网站,wordpress 建立小工具1 C 线程介绍 std::thread 是 C11 标准引入的线程库&#xff0c;提供面向对象的多线程编程接口&#xff0c;比传统的 POSIX 线程&#xff08;pthread&#xff09;更易用且类型安全。 1.1 基本用法 头文件与基本创建 #include <thread> #include <iostream>void…

1 C++ 线程介绍

std::thread 是 C++11 标准引入的线程库,提供面向对象的多线程编程接口,比传统的 POSIX 线程(pthread)更易用且类型安全。

1.1 基本用法

  1. 头文件与基本创建
#include <thread>
#include <iostream>void hello() {std::cout << "Hello from thread!\n";
}int main() {// 创建并启动线程std::thread t(hello);    // 等待线程结束t.join();    return 0;
}
  1. 带参数的线程函数
void print_num(int num, const std::string& str) {std::cout << "Number: " << num << " String: " << str << "\n";
}int main() {std::thread t(print_num, 42, "Answer");t.join();
}

1.2 常见的api函数

在这里插入图片描述

1.3 detach() 介绍

  1. 所有权转移:

调用detach()后,std::thread对象不再拥有该线程。线程变为"守护线程"(daemon thread),在后台运行

  1. 资源管理:

分离的线程结束时,系统会自动回收其资源。不需要也不能再调用join()。

  1. 调用限制:

只能在joinable()为true时调用(即新创建且未join/detach过的线程)。调用后joinable()变为false

detach()是一个强大但需要谨慎使用的工具,正确使用可以实现有效的后台任务处理,但不当使用会导致难以调试的问题。在大多数情况下,优先考虑使用join()或更高级的抽象(如std::async或线程池)。

1.3.1 案例

void log_writer() {while(true) {write_logs();std::this_thread::sleep_for(std::chrono::minutes(1));}
}int main() {std::thread t(log_writer);t.detach();// ... 主程序继续
}

2 同步设置

2.1 互斥锁

互斥锁是多线程编程中最基础的同步机制,用于保护共享数据,防止多个线程同时访问造成的数据竞争问题。C++11在标准库中引入了多种互斥锁类型。

2.1.1 一般应用

#include <mutex>
#include <thread>std::mutex mtx;  // 全局互斥锁
int shared_data = 0;void increment() {mtx.lock();    // 加锁++shared_data; // 临界区mtx.unlock();  // 解锁
}

2.1.2 更加安全应用

  1. std::lock_guard 最简单的RAII锁管理,构造时加锁,析构时解锁
{std::lock_guard<std::mutex> lock(mtx);  // 进入作用域加锁// 临界区代码
} // 离开作用域自动解锁
  1. std::unique_lock 更灵活的RAII锁管理,支持延迟锁定、条件变量等。
std::unique_lock<std::mutex> lock(mtx, std::defer_lock); // 延迟加锁
if(lock.try_lock()) {  // 手动尝试加锁// 临界区代码
}

案例如下

#include <mutex>std::mutex mtx;
int shared_data = 0;void safe_increment() {std::lock_guard<std::mutex> lock(mtx);++shared_data;
}

2.2 条件变量

条件变量是多线程编程中用于线程间同步的重要机制,它允许线程在某个条件不满足时挂起,直到其他线程通知条件可能已发生变化。

条件变量总是与互斥锁配合使用,主要解决以下问题:

  1. 线程需要等待某个条件成立

  2. 避免忙等待(busy-waiting)造成的CPU资源浪费

  3. 实现高效的线程间通信

2.2.1 基本组件

#include <condition_variable>std::mutex mtx;                  // 互斥锁
std::condition_variable cv;       // 条件变量
bool ready = false;               // 共享条件

2.2.2 等待

std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, []{ return ready; });  // 条件不满足时自动释放锁并等待
// 条件满足后继续执行,锁已重新获取

运行案例:

#include <condition_variable>std::mutex mtx;
std::condition_variable cv;
bool ready = false;void worker() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, []{ return ready; });// 处理数据
}void controller() {{std::lock_guard<std::mutex> lock(mtx);ready = true;}cv.notify_all();
}

3 与pthread的区别

在这里插入图片描述

4 问题

4.1 资源泄漏风险

void risky_function() {std::thread t(heavy_task);if(some_condition) {throw std::runtime_error("Oops");// 线程t未被join,导致资源泄漏}t.join();
}

4.2 过渡创建

for(int i=0; i<1000; ++i) {std::thread t(short_task);  // 频繁创建/销毁线程代价高t.detach();
}

5 线程池

线程池是一种多线程处理形式,它预先创建一组线程并维护这些线程的生命周期,通过任务队列机制来处理并发任务。线程池是现代并发编程的基础设施,合理使用可以显著提升程序性能,同时降低系统资源消耗。开发者应根据具体场景选择合适的线程池实现和配置参数。

// 使用线程池示例(伪代码)
ThreadPool pool(4);  // 4个工作线程for(auto& task : tasks) {pool.enqueue(task);  // 任务排队执行
}
http://www.dtcms.com/wzjs/294917.html

相关文章:

  • 建设厅网站总经济师是干什么的好用的网站推荐
  • 织梦 网站迁移苏州关键词排名提升
  • 赣州网站建设平台营销策略的概念
  • 卖视频会员个人网站怎么做镇江网站seo
  • 怎样在建设部网站下载规范seo优化实训总结
  • 网站备案导致网站被k竞价推广账户托管服务
  • 资阳的网站建设seo网站优化排名
  • 湖北营销网站建设联系方式如何自己制作网页
  • 阳江网红打卡景点seo网络营销推广公司深圳
  • 电子商务网站建设与维护 教材windows清理优化大师
  • 网站建设与管理 孙伟百度云盘资源
  • 全屏响应式网站徐州seo网站推广
  • 浅析动态网站建设之后台数据库的选择推广方案应该有哪些方面
  • 厦门有做网站建设seo优化上首页
  • 网站seo优化的重要性自动引流免费app
  • 西安模板网站建站线上推广方式有哪些
  • 博士后是否可以做网站负责人b2b网站大全免费
  • 免费建自己的网站赚钱上海空气中检测出病毒
  • 简单网站建设公司深圳百度开户
  • 衡阳网站建设公司哪家好打字赚钱平台 学生一单一结
  • 酒店微网站建设腾讯广告平台
  • 做投融资平台的网站都有哪些优化王
  • 可做用户密码暴力破解测试的网站永久8x的最新域名
  • 小榄做网站青岛网站seo优化
  • wordpress调用指定id文章网站seo收费
  • 纪实摄影网站推荐长春百度快速优化
  • 就业网站建设电商网站搭建
  • 挂机宝做网站可以吗广州今天新闻
  • 属于免费推广的方式是seo岗位是什么意思
  • 36 氪 网站如何优化沧州百度推广总代理