C++多线程基础学习笔记(二)】的更多相关文章

多线程介绍 学习多线程之前,我们先要了解几个关于多线程有关的概念.进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程.一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序. 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 什么是多线程呢?即就是一个程序中有多个线程在同时执行.通过下图来区别单线程程序与…
先总结延申以下前面(一)所讲的内容. 主线程从main()函数开始执行,我们创建的线程也需要一个函数作为入口开始执行,所以第一步先初始化函数. 整个进程是否执行完毕的标志是主线程是否执行完毕,一般情况下,如果想要保持子线程的运行状态,那么要主线程保持运行. 本章从两方面介绍创建线程的方法: 一.用函数创建线程: 关键词:thread(类),join() ,detach(),joinable(). join(),阻塞主线程,等待子线程执行完毕后,才到主线程执行. detach(),分离主线程,主线…
本项目为JAVA基础综合项目,主要包括: 熟练View层.Service层.Dao层之间的方法相互调用操作.熟练dbutils操作数据库表完成增删改查. 项目功能分析 查询账务 多条件组合查询账务 添加账务 编辑账务 删除账务 项目环境搭建 技术选型和jar包介绍 每个项目都要使用一些已经成熟的技术,它们通常是由一些专业组织或团队所提供的开源免费技术.在今后的学习过程中,我们会逐渐对这些专业组织有所了解.本项目中使用的技术如下: apache的commons组件: commons-dbutils…
一.操作符 1.一元操作符: 自加自减(分前置和后置2种):++.-- 区别:前置的先自加或自减,后进行计算:而后置的是先进行计算,后自加或自减(在其会产生负面影响时才能体现区别): ; i++; //++i console.log(i); // 没有负面影响的情况下:2/2 var a = (++i)+i; var b = (i++)+i; console.log(a); console.log(b); 其适合任何类型,非数字类型的会转换成数字类型 Number() :(基础类型的字面量不能使…
络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样.在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式.传输速率.传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换. 网络通信协议有很多种,目前应用最广泛的是TCP/IP协议(Transmission Control Protocal/Internet Protoal传输控制协议/英特网互联协议),它是…
MySQL 在dos中操作mysql 连接mysql命令: mysql -uroot -p密码 ,连接OK,会出现mysql> 对数据库的操作 创建一个库 create database 库名 create database 库名 character set 编码 mysql> create database mybase; Query OK, row affected (0.00 sec) mysql> show databases; +--------------------+ |…
什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句. JDBC原理 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他们刚刚开始时就发现这是不可完成的任务,因为各个厂商的数据库服务器差异太大了.后来SUN开始与数据库厂商们讨论,最终得出的结论是,由SUN提供一套访问数据库的规范(就是…
Jsp:Java Server Page 服务器端的Java页面,动态网页技术 jsp注释 显式注释:这种注释客户端是允许看见的;<!--html注释--> 隐式注释:这种注释客户端是看不到的 注释:格式一://注释,单行注释 格式二:/*多行注释*/ 格式三:<%--注释--%>jsp注释 <!-- 这个注释客户端可以可见 --> <%--这个注释客户端看不到 --%> <% out.println("学习jsp输出"); //输…
一.创建多个子线程 前面三章讲的例子都是只有一个子线程和主线程,然而实际中有多个子线程.那么下面介绍如何创建多个子线程. #include <iostream> #include <vector> #include <list> #include <thread> using namespace std; void mythread(int i) { cout << "id为" << std::this_threa…
注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public void f() {} } 文档注释 /** The first Thinking in Java example program. * Lists system information on current machine. * @author Bruce Eckel * @author http:/…
类加载器 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,链接,初始化三步来实现对这个类进行初始化. 加载就是指将class文件读入内存,并为之创建一个Class对象.任何类被使用时系统都会建立一个Class对象. 链接指的是将Java类的二进制代码合并到JVM的运行状态之中的过程.在链接之前,这个类必须被成功加载.类的链接包括验证.准备和解析等几个步骤. 验证:是否有正确的内部结构,并和其他类协调一致. 准备:负责为类的静态成员分配内存,并设置默认初始化值 解析:…
.MYSQL的安装 1.打开下载的mysql安装文件mysql-5.5.27-win32.zip,双击解压缩,运行“setup.exe”. 2.选择安装类型,有“Typical(默认)”.“Complete(完全)”.“Custom(用户自定义)”三个选项,选择“Custom”,按“next”键继续. 3.点选“Browse”,手动指定安装目录. 4.填上安装目录,我的是“F:\Server\MySQL\MySQL Server 5.0”,也建议不要放在与操作系统同一分区,这样可以防止系统备份还…
DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils.DBUtils就是JDBC的简化开发工具包.需要项目导入commons-dbutils-1.6.jar才能够正常使用DBUtils工具. DBUtils是java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. Dbutils三个核心功能介绍 QueryRunner中…
virtual user generator(vugen) 在测试环境中,loadrunner在物理计算机上使用vuser代替实际用户.vuser以一种可重复.可预测的方式模拟典型用户的操作,对系统施加负载. vugen 以 录制-回放的方式工作.在应用程序中执行业务流程步骤时,vugen会将操作录制到自动化脚本中,并将其作为负载测试的基础. 录制用户操作 1 启动loadrunner :开始-hp loadrunner-loadrunner 打开launcher窗格 2 打开 vugen la…
一.监听器 监听器是一个专门用于对其他对象身上发生的事件或状态改变进行监听和相应处理的对象,当被监视的对象发生情况时,立即采取相应的行动.监听器其实就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法立即被执行. 二.监听器统计在线人数--HttpSessionListener实现 package com.pb.news.listenter; public class OnlineCounter { pub…
一.过滤器简介 二.在Eclipse中创建过滤器 三.使用过滤器设置全部web字符编码 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // place your code here // pass the reques…
一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现servlet接口. 2.把开发好的Java类部署到web服务器中. 按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet 二.ServletAPI 三.Servlet的方法 四.S…
Html助手 1 .在@app\views\test的index.php中: <?php //引入命名空间 use yii\helpers\Html; ?> <?php //[一]表单:Html::beginForm(提交地址,提交方法,属性数组);?> <?=Html::beginForm('','post',['id'=>'form','class'=>'form','data'=>'myself']);?> <?php //[二]输入框:H…
面向对象 一.面向对象概述 面向对象思想就是在计算机程序设计过程中,参照现实事物,将事物的属性特征.行为特征抽象出来,描述成计算机时间的设计思想.面向对象思想区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现. 特点:将复杂的事情简单化,抽象化. 三大基本特征:封装,继承,多态.(后面具体介绍) 类和对象:类是属性(成员变量)和行为(成员方法)的集合,对象是类的一个实例. public class oop { int a; //a是一个成员属性 成员属性位于…
一.Windows临界区的基本用法 CRITICAL_SECTION my_winsc;              //定义一个Windows的临界区,相当于一个mutex变量 InitializeCriticalSection(&my_winsc);        //初始化 EnterCriticalSection(&my_winsc);            //进入临界区,相当于lock() LeaveCriticalSection(&my_winsc);         …
一.std::atomic续谈 上一章说到std::atomic是针对一个变量的,这里补充一下针对的变量操作一般是++,+=,--,&=等等运算 .以下这种不可取:a=a+1; 二.std::async与std::std::thread的区别 1.std::async第一个参数为std::lauch::async时,会强制创建一个线程,更确切来说,是创建一个异步任务,而std::thread有时会由于资源紧张,创建线程失败,从而导致程序报异常崩溃. 2.std::saync第二个参数为std::…
一.std::async和std::future的用法 std::async是一个函数模板,std::future是一个类模板 #include <iostream> #include <thread> #include <future> #include <Windows.h> using namespace std; int mythread() { cout << "my thread:" << std::t…
一.互斥量 1.1 互斥量的基本概念 简单来说,一个锁就是一个互斥量,既然是锁,就有两种状态:加锁和解锁,通过加锁>>>操作共享数据>>>解锁的方式,实现保护共享数据. 1.2 互斥量的用法 作用:在给某段代码加锁后,如果其他其他线程需要先等带该段代码执行完,然后解锁后才能继续执行. 头文件 :#include <mutex> 成员函数:lock()   //加锁,unlock()  //解锁 注意点:lock()与unlock()的使用必须成对存在. #i…
一.detach()大坑 上一篇随笔(二)中提到detach()是用来分离主线程和子线程的,那么需要考虑一个问题,就是如果主线程跑完了,主线程中定义的变量就会被销毁(释放内存),这时回收变量仍作为参数传入子线程,那么就会出现问题,下面用一个例子详细说明. #include <iostream> #include <string> #include <thread> using namespace std; void MyThread(const int& a,…
下面分三个方面多线程技术的必须掌握一些基本知识. 1.进程 2.线程 3.并发 (1)进程 一个可执行程序运行起来了,即为创建了一个进程.如在电脑上打开了word,就创建了一个word进程,打开QQ,又创建了一个QQ进程. 可以在任务管理器中----->用户中查看进程. 不同的进程之间的通信方式有:管道.消息队列.共享内存.信号量(同一台电脑),socket(支持不同电脑). (2)线程 1.线程可理解成一条代码执行的通道 2.线程与进程之间的关系: 同一个进程允许有多个线程: 同一个进程的每个…
一.super 和 this的用法 主要解释一下引用构造函数的用法 super(参数):调用父类中的某一个构造函数(应该为构造函数中的第一条语句) this(参数):调用本类中另一种形式的构造函数(应该为构造函数中的第一条语句) 实例 class Person { public static void prt(String s) {      System.out.println(s); }     Person() {         prt("父类·无参数构造方法: "+"…
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. 为了解决线程安全的问题,我们可以使用“同步”来控制线程访问.当一个线程在使用这个共享资源(不仅仅是变量,还可以是集合.对象等)的时候,其他线程就无法访问. package threadStudy; public class ThreadSynchronizedTest { public static…
1.列表 ①列表的创建: ②列表的查询(索引): ③列表的切片操作: 此处要注意到:返回索引0到3的元素,顾头不顾尾. ④列表的增加: s.append()  #直接在结尾追加 s.insert()  #在指定列表索引值的位置,插入指定元素,例如: ⑤列表的删除: s.remove():删除从左找到的第一个指定元素 s.pop():删除最后一个元素,并返回最后一个元素的值 del s[]:用python全局的删除方法删除指定元素 注意:del s[1:6]是删除多个元素 ⑥列表的循环操作: ⑦列…
转换流 在学习字符流(FileReader.FileWriter)的时候,其中说如果需要指定编码和缓冲区大小时,可以在字节流的基础上,构造一个InputStreamReader或者OutputStreamWriter,这又是什么意思呢? OutputStreamWriter类 查阅OutputStreamWriter的API介绍,OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字节.它的作用的就是,将字符串按照指定的编码表转成字节,…
1.字体图标 1.字体图标都是用svg图片 1.svg图片不失真 2.svg图标由设计师提供 3.为了减少网络请求,会把svg图标转换成字体图标,放到字体文件中,通过字体库的方式使用 2.制作步骤 1.上传字体图标到在线制作网站:阿里图标库或iconmoon 2.下载代码 3.注意点:在上传之前要把图标的名字改好,不然类名会带有后缀 3.原理 1.css3语法引入字体:@font-face @font-face { font-family: "自定义字体名"; src : url()…