c++11多线程学习笔记之二 mutex使用
2024-10-20 16:31:16
// 1111111.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <thread>
#include <mutex> int gcounter = 0;
std::mutex gmtx;
std::mutex gmtxOutput; void Increases() {
for (int i = 0; i<10000; ++i) {
if (gmtx.try_lock()) { // only increase if currently not locked:
++gcounter;
gmtx.unlock();
}
else{
gmtxOutput.lock();
std::cout << "try lock failed" << std::endl;
gmtxOutput.unlock();
}
}
} int _tmain(int argc, _TCHAR* argv[]) {
std::thread threads[10];
for (int i = 0; i<10; ++i)
threads[i] = std::thread(Increases); for (auto& th : threads)
th.join();
std::cout << "counter is " << gcounter << std::endl; return 0;
}
输出:
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
try lock failed
counter is 99983
请按任意键继续. . .
这个例子说明了 try_lock() 与 lock()的区别
try_lock()会对能否上锁进行测试 并返回布尔值
而lock()则直接进行锁定 不能锁定则阻塞直到锁定
最新文章
- C# - 缓存OutputCache(二)缓存详细介绍
- 3-PHP全部编码UTF-8
- C# 科学计数法转换成数字
- UDT中的epoll
- HTML 学习笔记 CSS(选择器4)
- WP8.1&;Win10幸运大转盘源码分享
- Java学习----finally块
- 那么 Appium 到底是怎么工作的呢?
- 部署maria数据库到linux(源码编译安装)
- 【mysql】must reset your password using ALTER USER statement before executing this statement
- linux配置Anaconda python集成环境
- ASP.NET Core OceLot 微服务实践
- React 入门学习笔记整理(四)—— 事件
- SQL Server ltrim(rtrim()) 去不掉空格
- ubuntu12.04下安装Apache+PHP+MySQL
- python3: 数字日期和时间(1)
- centos7下创建mysql5.6多实例
- 滑动窗口的最大值 &#183; sliding-window-maximum
- Flink--Streaming Connectors
- Hbase(六) hbase Java API