c++11多线程学习笔记之二 mutex使用
// 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++11多线程学习笔记之二 mutex使用的更多相关文章
- 以Android环境为例的多线程学习笔记(二)-----------------锁和条件机制
现在的绝大多数应用程序都是多线程的程序,而当有两个或两个以上的线程需要对同一数据进行存取时,就会出现条件竞争,也即 是这几个线程中都会有一段修改该数据状态的代码.但是如果这些线程的运行顺序推行不当的话 ...
- c++11多线程学习笔记之四 生产消费者
#ifndef MY_QUEUE_H__ #define MY_QUEUE_H__ #include<list> #include<mutex> #include<thr ...
- c++11多线程学习笔记之三 condition_variable使用
从windows角度来说,condition_variable类似event. 阻塞等待出发,不过condition_variable可以批量出发. 代码如下: // 1111111.cpp : 定义 ...
- c++11多线程学习笔记之一 thread基础使用
没啥好讲的 c++11 thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...
- Java多线程学习笔记(二)
三 多线程执行的共享数据和非共享数据: 共享数据:就是每个线程执行的时候共享数据使用,比如这个线程一个为5的数据,减少为4之后,另一个线程执行拿到的数据是4,两个线程执行的数据是共享的. 非共享数据: ...
- java 多线程学习笔记(二) -- IO密集型任务
IO密集型是指对IO操作较多的任务.下面以查询一些股票价格任务为例: YahooFinance.java public class YahooFinance { public static doubl ...
- Java多线程学习笔记(二)——Executor,Executors,ExecutorService比较
Executor:是Java线程池的超级接口:提供一个execute(Runnable command)方法;我们一般用它的继承接口ExecutorService. Executors:是java.u ...
- Java多线程学习笔记之二缓存
1.高速缓存 由来:处理器处理能力原因大于主内存(DRAM)访问速率,为了弥补这个差距,引入了高速缓存. 高速缓存是一种存取速率远比主内存大而容量远比主内存小的存储部件,每一个处理器都有其高速缓存.在 ...
- Java多线程学习笔记(一)——多线程实现和安全问题
1. 线程.进程.多线程: 进程是正在执行的程序,线程是进程中的代码执行,多线程就是在一个进程中有多个线程同时执行不同的任务,就像QQ,既可以开视频,又可以同时打字聊天. 2.线程的特点: 1.运行任 ...
随机推荐
- UVA-572-搜索基础题
题意 GeoSurvComp 地理调查公司负责发现石油存储,这次GeoSurvComp公司在一个大型矩形区域上工作,它用一个网格分割地表,然后用可感知装备来单独分析每块小方格区域下是否包含石油,有油的 ...
- 0_Simple__vectorAdd + 0_Simple__vectorAdd_nvrtc + 0_Simple__vectorAddDrv
▶ 使用 CUDA Runtime API,运行时编译,Driver API 三种接口计算向量加法 ▶ 源代码,CUDA Runtime API #include <stdio.h> #i ...
- JAVA 读取配置文件 xxx.properties
package config_demo; import java.io.InputStream; import java.util.Properties; public class UrlDemo { ...
- apache中 MaxClients 与MaxRequestsPerChild
据现象来对APACHE调优,以前用MAXCLIENTS 3000,砖家建议后,改为1500,今天查资料如下: http://www.linuxqq.net/ MaxClients 要加到多少?连接数理 ...
- 5.mybatis实战教程(mybatis in action)之五:与spring3集成(附源码)
转自:https://blog.csdn.net/nnn9223643/article/details/41962097 在 这一系列文章中,前面讲到纯粹用mybatis 连接数据库, 然后 进行增删 ...
- Js 正则限制只能输入数字或中文的代码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- idea中spring boot启动后无法访问jsp
出自:https://www.jianshu.com/p/470b28d76147 第一种: 打开File > Project Structure > Facetes 如图1: 图1 如果 ...
- Nginx安装部署以及配置文件解析
Nginx 中的 Location 指令 是NginxHttpCoreModule中重要指令.Location 指令,是用来为匹配的 URI 进行配置,URI 即语法中的”/uri/”,可以是字符串或 ...
- ArcGIS模型构建器案例学习-批量删除空要素类地理模型
ArcGIS模型构建器案例学习笔记-批量删除空要素类地理模型 联系方式:谢老师,135-4855-4328,xiexiaokui@qq.com 目的:批量删除记录个数为0的矢量文件 优点:逻辑清晰,不 ...
- MongoDB 集合命令
集合命令 创建语法如下 name是要创建的集合的名称 options是一个文档,用于指定集合的配置,选项参数是可选的,所以只需要到指定的集合名称 可以不手动创建集合,向不存在的集合中第一次加入数据 ...