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

大型网站建设制作平台手表电商网站

大型网站建设制作平台,手表电商网站,做企业培训的网站,各省施工备案网站当处理多线程并发时#xff0c;正确使用锁是确保线程安全的关键。 1. std::mutex#xff08;互斥锁#xff09;#xff1a; std::mutex 是C标准库提供的最基本的锁。它的基本使用如下#xff1a; #include iostream #include mutex #include threa…当处理多线程并发时正确使用锁是确保线程安全的关键。 1. std::mutex互斥锁 std::mutex 是C标准库提供的最基本的锁。它的基本使用如下 #include iostream #include mutex #include threadstd::mutex myMutex;void sharedResourceAccess() {std::lock_guardstd::mutex lock(myMutex);// 访问共享资源的代码std::cout Accessing shared resource...\n; }int main() {std::thread t1(sharedResourceAccess);std::thread t2(sharedResourceAccess);t1.join();t2.join();return 0; }注意事项 使用 std::lock_guard 是一种简单而安全的方式它会在作用域结束时自动释放锁。避免手动调用 unlock()因为忘记释放锁可能导致严重的问题。 2. std::unique_lock std::unique_lock 提供了更灵活的锁定和解锁方式同时支持条件变量。在某些情况下这种灵活性是很有用的 #include iostream #include mutex #include threadstd::mutex myMutex;void sharedResourceAccess() {std::unique_lockstd::mutex lock(myMutex);// 访问共享资源的代码std::cout Accessing shared resource...\n;// lock.unlock(); // 可以手动解锁 }int main() {std::thread t1(sharedResourceAccess);std::thread t2(sharedResourceAccess);t1.join();t2.join();return 0; }注意事项 std::unique_lock 可以在构造时不锁定也可以手动解锁。支持条件变量可以灵活地等待某个条件成立后再继续执行。 3. std::recursive_mutex std::recursive_mutex 允许同一个线程多次锁定同一把锁。这对于递归函数可能需要在同一线程中多次获取锁的情况很有用 #include iostream #include mutex #include threadstd::recursive_mutex myRecursiveMutex;void recursiveAccess(int depth) {std::unique_lockstd::recursive_mutex lock(myRecursiveMutex);if (depth 0) {recursiveAccess(depth - 1);}// 访问共享资源的代码std::cout Accessing shared resource at depth depth ...\n; }int main() {std::thread t1(recursiveAccess, 3);t1.join();return 0; }注意事项 递归锁允许同一线程多次获取锁但要小心不要导致死锁。 4. std::shared_mutex std::shared_mutex 是C14标准引入的互斥锁它提供了共享/独占两种锁定方式。这使得多个线程可以同时共享资源而只有一个线程可以独占地修改资源。这在某些情况下能够提高并发性能。 以下是 std::shared_mutex 的主要特点和用法 共享锁Shared Lock 多个线程可以同时获得共享锁这允许它们并发地读取共享资源。共享锁使用 std::shared_lock 来获取。 #include shared_mutexstd::shared_mutex mySharedMutex;void readOperation() {std::shared_lockstd::shared_mutex lock(mySharedMutex);// 读取共享资源的代码 }独占锁Exclusive Lock 只有一个线程可以获得独占锁这使得它能够独占地修改共享资源。独占锁使用 std::unique_lock 来获取。 #include shared_mutexstd::shared_mutex mySharedMutex;void writeOperation() {std::unique_lockstd::shared_mutex lock(mySharedMutex);// 修改共享资源的代码 }避免写者饥饿Writer Starvation Avoidance std::shared_mutex 的设计旨在避免写者饥饿问题即允许读者和写者以公平的方式争夺锁。 适用于读多写少的场景 std::shared_mutex 在读多写少的情况下表现得较为优越因为多个线程可以同时获得共享锁提高了并发性能。 注意事项 使用 std::shared_lock 进行读取操作使用 std::unique_lock 进行写入操作。避免在写入操作中使用共享锁以免破坏写者的互斥性。 #include iostream #include shared_mutex #include vector #include threadint sharedData0; std::shared_mutex mySharedMutex;void readOperation(int id) {//std::shared_lockstd::shared_mutex lock(mySharedMutex);mySharedMutex.lock_shared();//手动控制// 读取共享资源的代码std::cout Reader id reading data: sharedData std::endl;mySharedMutex.unlock_shared();//手动控制 }void writeOperation(int id) {//std::unique_lockstd::shared_mutex lock(mySharedMutex);mySharedMutex.lock();//手动控制// 修改共享资源的代码sharedDataid;std::cout Writer id writing data. std::endl;mySharedMutex.unlock();//手动控制 }int main() {std::vectorstd::thread readers;std::vectorstd::thread writers;for (int i 0; i 5; i) {readers.emplace_back(readOperation, i);writers.emplace_back(writeOperation, i);}for (auto reader : readers) {reader.join();}for (auto writer : writers) {writer.join();}return 0; }在这个示例中读者和写者线程通过 std::shared_mutex 来协调对 sharedData 的读写操作。读者线程使用 std::shared_lock 获得共享锁而写者线程使用 std::unique_lock 获得独占锁。这样多个读者可以同时读取而写者会独占地修改共享资源。 以下是对 std::mutexstd::unique_lockstd::recursive_mutex和 std::shared_mutex 的特点进行比较的表格 特点std::mutexstd::unique_lockstd::recursive_mutexstd::shared_mutex类型互斥锁可锁定、可解锁的锁递归互斥锁共享/独占互斥锁RAII 风格有使用 std::lock_guard有有有std::unique_lock支持条件变量不支持支持不支持支持是否支持递归不支持不支持支持不支持多线程性能适用于大多数场景较轻量级较为灵活适用于复杂的场景适用于需要递归锁的场景适用于读多写少的场景锁定粒度整个作用域内的代码可以在较小的范围内进行锁定和解锁整个作用域内的代码可以同时支持独占和共享访问死锁风险高如果未正确解锁可能导致死锁低通过 std::lock() 可以避免死锁递归锁允许同一线程多次获取锁小心死锁风险低支持共享和独占访问适当使用可以减少死锁风险内存开销低较为轻量级较高提供了更多的功能较高需要额外的信息来支持递归锁较高需要维护更多状态信息 这个比较表格总结了这些锁的主要特点但具体的选择取决于你的应用场景和需求。通常来说std::mutex 是最基本的锁而 std::unique_lock 提供了更多的灵活性特别是在需要支持条件变量的情况下。std::recursive_mutex 对于需要在同一线程中多次获取锁的递归情况很有用。std::shared_mutex 则适用于读多写少的场景提供了更好的并发性能。
http://www.hkea.cn/news/14495576/

相关文章:

  • 个人网站可以做商城吗发帖秒收录的网站
  • 漯河网站建设lhwzzz台州市建设局招聘网站
  • txt电子书下载网站推荐网站设计建设公司需要什么资质
  • 密云网站开发做网站公司宣传语
  • 做网站的流程分析上海最有名的公司集团
  • 移动电子商务网站建设长尾词排名优化软件
  • 网站建设的网站分析怎么写网站seo综合诊断
  • 网站互动交流怎么做博览局网站建设
  • 美食网站建设关于网站建设与维护的心得体会
  • 手机版网站公司的页面设计在哪里
  • 郴州公司网站建设鞍山网站建设找金航
  • 泉州北京网站建设价格旅游在线网站开发
  • 网站营销管理培训班用织梦建手机网站
  • 搜狗站长平台验证网站wordpress 无边栏 模板
  • 网站建设推广公司价格网站内容与模板设计方案
  • 专门做二手书的网站下载网站后怎么做的
  • 二次开发的软件网站搜索引擎优化方案
  • 通化工程建设信息网站莱芜话题论坛
  • 天津商城网站设计公司百度seo课程
  • 网站新闻标题标题怎样进行优化动漫设计中专学校
  • 英文网站注意事项if设计大赛官网
  • 3分钟搞定网站seo优化外链建设怎么看网站开发者页面
  • 郑州网站建设品牌wordpress群发
  • 网站建设都包括哪些方面中国互联网服务平台
  • 做网站需要什么人电信专线可以做网站吗
  • 科威网络做网站怎么样如何加快百度收录网站
  • 菏泽外贸网站建设网站后台建设教程
  • 银川网站建设公司哪家不错做app公司
  • 重庆网站建设百度推广石家庄网站设计公司
  • 潍坊网站定制公司宝安中心网站建设