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

连云港东海网站建设加盟网络营销推广公司

连云港东海网站建设,加盟网络营销推广公司,如何评价网站是否做的好坏,自己做民宿在什么网站上投放1. C 线程和线程管理 C11 引入了线程支持&#xff0c;可以通过 std::thread 创建和管理线程。以下是线程管理的关键概念&#xff1a; 1.1 创建线程 使用 std::thread 类来创建一个线程并启动该线程&#xff1a; #include <iostream> #include <thread>void pri…

1. C++ 线程和线程管理

C++11 引入了线程支持,可以通过 std::thread 创建和管理线程。以下是线程管理的关键概念:

1.1 创建线程

使用 std::thread 类来创建一个线程并启动该线程:

#include <iostream>
#include <thread>void print_hello() {std::cout << "Hello from thread!" << std::endl;
}int main() {std::thread t(print_hello);  // 创建线程并执行print_hello函数t.join();  // 主线程等待子线程执行完成return 0;
}
  • t.join():会阻塞主线程,直到线程 t 完成其任务。
  • t.detach():会将线程与主线程分离,主线程不会等待线程的完成。
1.2 线程与主线程分离(detach()
std::thread t(print_hello);
t.detach();  // 线程将在后台运行,主线程不再等待它
  • 分离线程意味着主线程无法再与之交互,且程序结束时,分离的线程会被系统自动清理。
  • 如果分离的线程在主线程退出时仍然活跃,可能会造成资源泄露或访问未定义行为。
1.3 线程的生命周期

线程的生命周期由创建线程的 std::thread 对象管理。如果线程对象在析构时未调用 join()detach(),程序将抛出异常,提示线程没有正确管理。


2. 锁和互斥量

在多线程环境中,锁和互斥量用于同步线程访问共享资源,以避免数据竞态和死锁等问题。C++ 提供了多种锁和互斥量类型来应对不同的同步需求。

2.1 std::mutex(互斥量)

std::mutex 是最常用的锁类型,确保同一时刻只有一个线程能访问共享资源。

std::mutex mtx;void print_hello(int id) {std::lock_guard<std::mutex> lock(mtx);std::cout << "Thread " << id << " is working" << std::endl;
}
  • std::lock_guard:提供 RAII 风格的锁管理,自动加锁和解锁。
  • std::unique_lock:功能更强大,支持手动解锁和锁定、延迟锁定等。
2.2 std::recursive_mutex(递归互斥量)

std::recursive_mutex 允许同一线程多次加锁而不会死锁,适用于递归的场景。

std::recursive_mutex rmtx;void recursive_print(int id, int count) {std::lock_guard<std::recursive_mutex> lock(rmtx);if (count > 0) {std::cout << "Thread " << id << " printing recursively, count: " << count << std::endl;recursive_print(id, count - 1);}
}
  • 适合需要递归操作的场景,例如递归函数中的锁保护。
2.3 std::shared_mutex(共享互斥量)

std::shared_mutex 允许多个线程共享读取数据的锁,但写入数据时会独占访问权。

std::shared_mutex smtx;void read_data(int id) {std::shared_lock<std::shared_mutex> lock(smtx);  // 共享锁std::cout << "Thread " << id << " is reading data." << std::endl;
}void write_data(int id) {std::unique_lock<std::shared_mutex> lock(smtx);  // 独占锁std::cout << "Thread " << id << " is writing data." << std::endl;
}
  • std::shared_lock:获取共享锁,多个线程可以同时读取资源。
  • std::unique_lock:获取独占锁,确保只有一个线程能够写入数据。
2.4 std::timed_mutexstd::try_lock

std::timed_mutex 允许线程尝试在指定时间内获取锁,而 std::try_lock 则允许线程立即返回尝试锁定结果。

std::timed_mutex tmtx;void try_lock_example() {if (tmtx.try_lock_for(std::chrono::seconds(1))) {std::cout << "Lock acquired successfully" << std::endl;tmtx.unlock();} else {std::cout << "Lock attempt timed out" << std::endl;}
}
  • try_lock_for():尝试在指定的时间内获取锁。
  • try_lock():立即返回是否能够成功获取锁。

3. 线程同步:std::condition_variable

std::condition_variable 用于线程间的通知机制,通过它,线程可以在特定条件发生时被唤醒。主要的两种操作是 notify_one()notify_all()

3.1 std::condition_variable 基本用法
std::mutex mtx;
std::condition_variable cv;void wait_for_data() {std::unique_lock<std::mutex> lock(mtx);cv.wait(lock, []{ return data_ready; });  // 等待条件满足// 数据准备好后继续执行
}
  • wait():阻塞当前线程,直到条件变量被通知。
  • notify_one():唤醒一个等待线程。
  • notify_all():唤醒所有等待线程。
3.2 notify_one()notify_all() 的区别:
  • notify_one():唤醒一个线程,适合只需要唤醒一个线程的场景。
  • notify_all():唤醒所有等待的线程,适合所有线程都需要响应某个条件时。
void producer() {{std::lock_guard<std::mutex> lock(mtx);data_ready = true;}cv.notify_all();  // 唤醒所有等待线程
}void consumer(int id) {std::unique_lock<std::mutex> lock(mtx);while (!data_ready) cv.wait(lock);  // 等待数据准备好std::cout << "Consumer " << id << " is processing data" << std::endl;
}

4. 常见的锁类型总结

锁类型适用场景特点
std::mutex基本的互斥锁,保护共享资源不被并发访问不可递归,同一时间只有一个线程持有
std::recursive_mutex需要递归加锁的场景允许同一线程多次加锁
std::shared_mutex读多写少的场景,如缓存系统、数据库读写操作等读线程共享,写线程独占
std::timed_mutex需要超时控制的场景可在一定时间内尝试获取锁
std::lock_guard用于简化锁的管理,RAII 风格的锁管理自动加锁和解锁
std::unique_lock更灵活的锁管理,支持延迟锁定、解锁、重锁等支持手动解锁与重新锁定

总结

  • 线程创建与管理:C++11 提供了 std::thread 用于创建和管理线程,支持线程同步与并发操作。
  • 锁与互斥量:通过 std::mutexstd::recursive_mutexstd::shared_mutexstd::timed_mutex 等锁类型实现线程间资源同步,避免数据竞态。
  • 条件变量同步:使用 std::condition_variable 实现线程间的通知和等待机制,notify_one()notify_all() 用于唤醒等待线程。
  • RAII 风格的锁管理:使用 std::lock_guardstd::unique_lock 来简化锁的管理,确保锁的自动释放。
http://www.dtcms.com/wzjs/240168.html

相关文章:

  • wordpress自动tag排名优化公司哪家靠谱
  • 知名高端网站建设报价同城推广平台有哪些
  • 网站开发维护专员岗位职责电脑优化软件排行榜
  • 网站名词排名怎么做搜索
  • 网站设计软件培训怎么样关键词优化一年的收费标准
  • webview做网站app网址之家大全
  • 学校培训网站建设深圳全网推广公司
  • 余杭区建设局网站百度竞价排名查询网站
  • 无锡优化网站排名今日头条新闻最全新消息
  • 网站代码案例爱站网站长seo综合查询工具
  • 安阳网站开发网站注册流程和费用
  • 网站制作复杂吗推广团队
  • wordpress运行速度关键词优化的作用
  • 小型网站开发小论文产品设计公司
  • 农业信息中心网站建设厦门网站流量优化价格
  • 论坛网站地图怎么做近期国内新闻
  • 广州公司注册代理机构哪家好搜狗seo排名软件
  • 大连网站建设资讯自动优化句子的软件
  • 网站不同近期热点新闻事件
  • 上海平台网站开发宁波seo推广优化怎么做
  • 做权重网站免费友链互换
  • 做网站有地区差异吗公司网络推广排名定制
  • 商城型网站建设代理加盟seo推广外包
  • 网站建设考级百度开放平台登录
  • 怎样给一个公司做网站海外免费网站推广有哪些
  • 企业网站哪家好网络营销推广主要做什么?
  • 网站方案策划书seo服务外包费用
  • 石家庄有什么做网站的公司seo云优化公司
  • laravel做网站长春网站建设推广
  • 东阳网站建设公司小红书推广方式有哪些