ProDeveloperTutorial.com

教程和编程解决方案
菜单
  • Shell脚本
  • 系统设计
  • Linux系统编程
  • 4g LTE
  • 编码问题
  • C
  • C ++
  • DSA
  • GIT

C ++ 11功能:C ++多线程第14章:std :: try_lock

前开发者教程 2020年2月26日

1. try_lock用于锁定多个互斥锁。

2. try_lock用于通过使用try_lock成员函数来锁定对象。

3.这是一个非阻塞呼叫

4.尝试按给定顺序锁定所有对象

5.成功时将返回-1,否则将返回无法锁定的基于0的互斥体索引号

6.如果无法锁定任何互斥锁,则它将释放之前锁定的所有互斥锁。

7.如果对try_lock的调用导致异常,则在重新抛出之前,将对所有锁定的对象调用unlock。

例:

 

#include <iostream>       // std::cout
#include <future>         // std::async, std::future
#include <chrono>         // std::chrono::milliseconds
#include <thread>         // std::thread
#include <mutex>          // std::timed_mutex

// for more tutorials visit www.ProDeveloperTutorial.com
using namespace std;

std::mutex m1, m2;

void task_a () 
{
  m1.lock();
  std::cout << "task a\n";
  m2.lock();

  m1.unlock();
  m2.unlock();
}

void task_b () 
{
  int x = try_lock(m2,m1);
  if (x==-1) 
  {
    std::cout << "task b\n";
    m2.unlock();
    m1.unlock();
  }
  else 
  {
    std::cout << "[task b failed: mutex " << (x?"m1":"m2") << " locked]\n";
  }
}

int main ()
{
  std::thread th1 (task_a);
  std::thread th2 (task_b);

  th1.join();
  th2.join();

  return 0;
}

输出:

task a
[task b failed: mutex m1 locked]

该网站上可用的教程列表:

C编程20+章C ++编程80+章
100多个编码问题数据结构和算法85+章
系统设计20+章Shell脚本编写12章
4g LTE 60+章节最常见的编码问题
5G NR 50+章Linux系统编程20+章
分享
电子邮件
鸣叫
领英
Reddit
绊倒
Pinterest的
上一篇文章
下一篇

关于作者

前开发者教程

每天我们都会讨论竞争性编程问题,请加入我们的网站:   电报频道

ProDeveloperTutorial.com

教程和编程解决方案
版权© 2020 ProDeveloperTutorial.com
从以下课程获得热门课程: 教育性的