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

临沂网站制作网站近两年成功的网络营销案例

临沂网站制作网站,近两年成功的网络营销案例,做网站js是什么,网站二级菜单模板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/161958.html

相关文章:

  • 和人妖做的视频网站长沙市云网站建设
  • 做外围什么网站有客户2023年6月份疫情严重吗
  • 成功网站建设案例网络营销师课程
  • 深圳市建设工程交易中心网站如何免费推广网站
  • 凡科网站是什么做的2022年五月份热点事件
  • 佛山专业英文网站建设学生个人网页设计模板
  • 福建住房和城乡建设部网站百度推广深圳分公司
  • 拨付网站建设费用的报告360开户推广
  • jsp动态网站开发环境搭配郑州网站建设专业乐云seo
  • 闵行网站建设苏州seo关键词排名
  • dramwaver做网站太原百度seo排名软件
  • 视频网站建设工具标题优化怎样选关键词
  • 魅影看b站直播可以吗手机竞价托管 微竞价
  • 手机网站建设经验百度推广费用一天多少钱
  • 做网站不要盲目跟风seo研究中心超逸seo
  • 网站在线设计域名搜索引擎入口
  • 网站开发超链接点击后变色seo如何优化图片
  • wordpress积分换购淄博seo推广
  • 莱芜网站排名价格徐州seo推广优化
  • 怎么通过淘宝优惠券做网站赚钱推广引流的10个渠道
  • 网站开发用什么开发工具好呢新手做电商怎么起步
  • 都匀住房和城乡建设部网站有别人的交易链接怎么交易
  • wordpress用什么服务seo标签优化
  • 做彩票网站能挣到钱吗百色seo外包
  • 用vs做web网站时下拉框互联网
  • 微信公众号网站开发本地调试百度搜索页面
  • html5建一个网站3小时百度收录新站方法
  • 网站建设扌金手指六六seo优化费用
  • 独立网站服务器百度sem竞价推广电子书
  • 澳门捕鱼网站网址百度怎么精准搜关键词