C++11之超时锁timed_mutex

这篇具有很好参考价值的文章主要介绍了C++11之超时锁timed_mutex。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

超时锁:用来记录线程加锁 解锁 等竞争锁的过程,多用于调试多线程时使用。

启动多个线程,然后,竞争一把超时锁,分别打印记录加锁成功的线程和失败的线程id:

std::timed_mutex tmtx;

void ThradFunc()
{
    while (true)
    {
    	//如果失敗,將睡眠100毫秒,否則搶占鎖成功
    	//相當於常規鎖mutex :: try_lock()失敗 + sleep()
        if(!tmtx.try_lock_for(std::chrono::milliseconds(100)))
        {
            std::cout << "thread_id = " << std::this_thread::get_id() << " try lock failed" << std::endl;
            continue;
        }
        std::cout << "thread_id = " << std::this_thread::get_id() << " try lock success" << std::endl;
        std::this_thread::sleep_for(std::chrono::milliseconds(200));
        tmtx.unlock();
        std::this_thread::sleep_for(std::chrono::milliseconds(1));
    } 
}

int main()
{
    for(int i = 0; i < 3; ++i)
    {
        std::thread t(ThradFunc);
        t.detach();
    }
    getchar();
    return 0;
}

打印结果:文章来源地址https://www.toymoban.com/news/detail-643124.html

thread_id = 140532499904256 try lock success
thread_id = 140532508296960 try lock failed
thread_id = 140532491511552 try lock failed
thread_id = 140532508296960 try lock success
thread_id = 140532491511552 try lock failed
thread_id = 140532491511552 try lock failed
thread_id = 140532499904256 try lock failed
thread_id = 140532491511552 try lock success
thread_id = 140532499904256 try lock failed
thread_id = 140532508296960 try lock failed
thread_id = 140532499904256 try lock failed
thread_id = 140532508296960 try lock success
thread_id = 140532499904256 try lock failed
thread_id = 140532491511552 try lock failed
thread_id = 140532499904256 try lock failed
thread_id = 140532491511552 try lock success
thread_id = 140532499904256 try lock failed
thread_id = 140532508296960 try lock failed
thread_id = 140532499904256 try lock failed
thread_id = 140532508296960 try lock success
thread_id = 140532499904256 try lock failed
thread_id = 140532491511552 try lock failed
thread_id = 140532499904256 try lock failed
thread_id = 140532491511552 try lock success
thread_id = 140532499904256 try lock failed
thread_id = 140532508296960 try lock failed
thread_id = 140532499904256 try lock failed

到了这里,关于C++11之超时锁timed_mutex的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FTP上传超时问题排查 ftpClient.storeFile Connection timed out

    Ftp storeFile 超时日志如下 Caused by: java.net.ConnectException: Connection timed out (Connection timed out) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.Abstract

    2024年02月14日
    浏览(79)
  • 软件测试|解决Github port 443 : Timed out连接超时的问题

    前言 GitHub是全球最大的开源代码托管平台之一,许多开发者和团队使用它来管理和协作开源项目。但在当下,我们在clone或者提交代码时会经常遇到\\\"GitHub Port 443: Timed Out\\\"错误,这意味着我们的电脑无法建立与GitHub服务器的安全连接。这个问题通常由网络问题或防火墙设置引起

    2024年02月07日
    浏览(42)
  • 解决 github 无法访问 fatal: unable to access 、超时 Timed out

            github拉取项目提示如下问题         把网络的DNS配置改为 114.114.114.114 即可,操作步骤如下         1. 右键打开 \\\"网络和Internet\\\"设置                  2. 打开 \\\"更改适配器选项\\\"                  3. 右键点击对应网络连接属性                    4. 打

    2024年02月12日
    浏览(65)
  • Gradle在Androidstudio中下载超时提示Download info Connect timed out

            测试环境:Android Studio Giraffe | 2022.3.1 Patch 1         试验7次,成功了3次         下载速度时快时慢         将gradlewrappergradle-wrapper.properties中的地址放到迅雷中下载         如https://services.gradle.org/distributions/gradle-8.0-bin.zip

    2024年02月09日
    浏览(42)
  • Android 解决Connection timed out: connect或者部分第三方库下载超时问题

    之前比较老的项目重新打开,因为Android Studio 版本已经升级,导致原来部分的第三方库需要重新下载,但是因为墙或者其他原因,一直下载超时。后续解决了此问题,在此记录一下。 新版本的Android Studio 在 项目目录下的 settings.gradle 文件中添加如下代码: 旧版本的Android St

    2024年02月20日
    浏览(62)
  • mysql Dbeaver连不上(连接数据库超时connect time out),但是navicat能连上

    mysql Dbeaver连不上,但是navicat能连上 现象:连接超时 方案1: 在dbeaver安装目录找到dbeaver.ini添加一行 若方案1改完连接报这个错时 修改连接方式为URL 并带上useUnicode=true参数

    2024年02月04日
    浏览(46)
  • selenium 全屏截图报错超时Timed out receiving message from renderer: 10.000

    全屏截图代码: 报错信息: 改用以下代码截图,报错消失: 报错可能原因:设置网页全屏后,内容加载过多,会存在超时现象 疑似涉及browser.set_window_size(width, scroll_height)

    2024年02月22日
    浏览(45)
  • lettuce.core.RedisCommandTimeoutException: Command timed out after 1 minute(s) timeout 60000超时问题

    有一台服务器 java程序不定期会出现Redis command timed out; nested exception is io.lettuce.core.RedisCommandTimeoutException: Command timed out after 1 minute(s) 错误,导致应用出现 timeout 60000 错误,重启应用后,问题修复,但还是会不定期出现该问题。查看应用日志,发现有如下错误: 出现timeout 600

    2024年02月16日
    浏览(50)
  • 【Kafka超时问题(已解决),kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection w】

    1.Kafka正常运行一段时间后,用测试工具发送数据时报了错: 2.于是单独用黑窗口启动Kafka,看看具体报啥错: 3.原因 JDK版本和Kafka版本不匹配 。 (我手里项目较多,用的JDK版本也不一样,有的时候忘了把JDK切换回去,就报了这个错)。 我的Kafka版本: 更换JDK版本或Kafka版本

    2024年02月09日
    浏览(48)
  • GitHub连接超时:Failed to connect to github.com port 443: Connection timed out

    新建了一个仓库,想要执行`git push -u origin main`时,出现此错误。 1. ping ping github.com时,没有反应,超时。 (要么时github的问题,要么就是我的机器连不上。) 2. 检查github网站状态 访问GitHub Status,显示“All Systems Operational”。 (github没问题,机器的问题。) 在网上找了找处

    2024年01月25日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包