自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是很透彻.现在保研了,发现自己的时间也比较充裕了,因此想自己去系统的学习一下多线程的编程,说做就马上做(当时还躺在床上),我立马去图书馆,检索有关多线程的书籍,最终决定选择<Windows环境下多线程编程原理与应用>这本书,虽然有点旧,但对我这个菜鸟来说,还是有很多的东西需要学习的.因此就拿着本书开…
<一>线程间同步原因 线程间竞争共享资源: 线程间为完成某个任务而协作: 通过互斥量可以实现线程间由于竞争所需要的同步,通过事件可以实现线程间由于协作所需要的同步. 信号量很好地将互斥量和事件结合起来,同时解决竞争和协作问题. 信号量的两个核心操作:提高计数值和降低计数值(Up 和 Down).Down操作时检查信号量的计数值是否大于0,如果大于0,则信号量的计数值减1,线程继续运行:如果计数值为0,线程由于不能获得信号量而进入睡眠状态.这两个操作都是不可再分的操作. 与信号量有关的函数: 函…
<一>事件 事件主要用于线程间传递消息,通过事件来控制一个线程是处于执行状态还是处于挂起状态. 事件和互斥量之间的差别: 事件主要用于协调两个或者多个线程之间的动作,使其协调一致,符合逻辑.一个线程等待某个事件的发生,另一个线程则在事件发生后产生一个信号,通知那个正在等待的线程(我的理解:线程A等待键盘输入,线程B在有键盘输入后发送一个信号给A,使得A可以执行,事件就是“键盘输入”). 互斥量主要是为了保证在任何时刻只有一个线程在使用共享资源,线程的运行次序是随机的,有操作系统决定,因此互斥量…
<一>临界段 临界段对象通过提供所有线程必须共享的对象来控制线程.只有拥有临界段对象的线程才能够访问保护的资源.在另一个线程可以访问该资源之前,前一线程必须释放临界段对象,一遍新的线程可以获取对对象的访问权. 注意:互斥量是内核对象,可以跨进程使用,而临界段对象只能在进程内的线程间使用(虽然互斥量可以用于进程内的线程,但线程间的通信,互斥量没有临界段对象高效). 与临界段有关的API函数 名称 作用 InitializeCriticalSection() 创建一个临界段 DeleteCriti…
纤程 纤程(fiber): 相当于用户级别的线程或轻进程.纤程由Win32库函数支持,对核心是不可见的.纤程可以通过SwitchToFiber显示至另一合作纤程,以实现合作纤程之间的协同.线程是在Windows内核中实现的,纤程是在用户模式下实现的,内核对纤程一无所知,内核会根据我们定义的算法来对纤程进行调度.一个线程可以包含一个或多个纤程. 与纤程有关的函数: 要使用纤程,首先要做的就是把当前线程转换为纤程: PVOID ConvertThreadToFiber(PVOID pvParam);…
<一>互斥的同步机制 思想:当一个线程获得互斥量了后,其他所有要获取同一个互斥量的线程都处于阻塞状态,直到第一个线程释放互斥量为止. 设想几个线程竞争同一个互斥量,其中一个线程获得了互斥量.其他线程将被阻塞,进入睡眠状态.处于睡眠状态的线程几乎不消耗资源,这就有利于提高系统的运行效率.当占有互斥量的线程释放互斥量时,等待该互斥量的所有线程都将被“唤醒”,这些线程一起竞争该互斥量. <二>Win32 API中的互斥函数 函数名 作用 CreateMutex 创建一个新的互斥量 Ope…
面向对象技术是学C++需要重点掌握的知识,因为我觉得自己的基础还是比较可以,这一章节的内容就只是粗略的读了一遍,在此就不做过多的笔记.…
<一>线程间通信方法 全局变量方式:进程中的线程共享全局变量,可以通过全局变量进行线程间通信. 参数传递法:主线程创建子线程并让子线程为其服务,因此主线程和其他线程可以通过参数传递进行通信.主线程在创建其他线程时,可以传递参数给线程函数以达到通信目的. 消息传递法:线程间通信的重要方式,通过调用PostMessage()函数在主线程和工作线程间传递消息:调用PostThreadMessage()函数在用户界面线程和其他线程间传递消息. 同步变量法:此方法在后续章节涉及. <二>线程…
线程设计模式在按其有助于解决的多线程编程相关的问题可粗略分类如下. 不使用锁的情况下保证线程安全: Immutable Object(不可变对象)模式.Thread Specific Storage(线程特有存储)模式.Serial Thread Confinement(串行线程封闭)模式. 优雅地停止线程:Two-phase Termination(两阶段终止)模式. 线程协作:Guarded Suspension(保护性暂挂)模式 .Producer-Consumer(生产者/消费者)模式.…
关于docker在windows环境下执行的原理 1.1.           首先是Docker Quickstart启动,如果在虚拟机Oracle VM VirtualBox不存在default虚拟机的情况,会自己创建. 1.2.           实质上就是在windows的物理机上面安装linux的虚拟机,这个虚拟机的启动镜像中就包含docker,运行docker的是linux. 1.3.           在Docker Quickstart上面显示的default IP就是lin…
libevent对Windows环境也有很好的支持,不过初次学习和编译libevent简单实例,总是有一些陌生感的,只有成功编译并测试了一个实例,才会有恍然大悟的感觉.下面将要讲到的一个实例是我从网上抄过来的,原创文章地址为:http://www.felix021.com/blog/read.php?2068,表示感谢! 在给出我的第一个测试成功的例子代码之前,简要介绍一下libevent入门的基本知识.原文中作者有一段话是这样的: “基本的socket编程是阻塞/同步的,每个操作除非已经完成或…
Windows环境下用C#编程将文件上传至阿里云OSS笔记 本系列文章由ex_net(张建波)编写,转载请注明出处. http://blog.csdn.net/ex_net/article/details/24962567 作者:张建波 邮箱: 281451020@qq.com  欢迎来信交流! 第1步: 下载阿里云OSS的SDK包,因为笔者的环境是PHP服务,所下面载的是PHP的SDK包 http://help.aliyun.com/view/13438816.html 第2步:将代码整合进你…
Windows环境下32位汇编语言程序设计(典藏版)(含CD光盘1张)(年,经典再现!) 罗云彬 著 ISBN 978-7-121-20759-4 2013年7月出版 定价:99.00元 756页 16开 编辑推荐 畅销10年,经典再现! 本书第1版出版至今已经10年多了,第3版出版至今也已经3年多了,期间笔者收到了大量的读者来信,对本书提出了各种意见和建议,综合各方面的考虑,典藏版做了以下改进. ●     对第3版中已知的错误进行了修正,包括一些排版错误.错别字和例子中的Bug. ●    …
<Windows环境下32位汇编语言程序设计(典藏版) > 基本信息 作者: 罗云彬 出版社:电子工业出版社 ISBN:9787121207594 上架时间:2013-7-8 出版日期:2013 年7月 开本:16开 页码:756 版次:1-1 所属分类:计算机 更多关于 >>><Windows环境下32位汇编语言程序设计(典藏版)> 内容简介 计算机书籍 windows环境下32位汇编语言是一种全新的编程语言.它使用与c++语言相同的api接口,不仅可以开发出大…
提示:在有些板块,文中的图片看不到,建议到我的blog浏览文章:http://blog.csdn.net/jemlee2002/文章将会涉及3个方面的内容: 第一部分:使用iReport制作报表的详细过程(Windows环境下) 第二部分:使用Jasperreport作为报表控件开发胖客户端报表应用 第三部分:使用Jasperreport作为报表控件开发Web报表应用 1.前言 在网络上可以搜索到很多使用iReport和Jasperreport配合实现各种报表任务的文章,但是我觉得很少有一篇(几…
近日在读O’REILIY系列的<高可用MySQL>, 自然少不了主从(Master-Slave)配置和横向扩展相关的内容.Master-Slave这东西吧,在许多公司都是标配,开发中基本天天都用,遇到的问题自然也不少(如主从不同步,Master宕机),但操作权限非常有限.有些东西,只有自己看了.做了,才能真正知道原理是什么,也才能更好的去把握. 本文是高可用MySQL的第一篇读书笔记,主要记录Windows环境下压缩版MySQL(基于安装版的傻瓜式安装过程这里不再提及)的安装过程. 1. 从官…
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一…
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设备.接口.驱动控制的应用开发,不得不使用到本文的NDK开发环境(基于Android源码或内核源码修改),开发语言使用C/C++,NDK开发更接近于Linux开发,需要更多关于Linux应用编程知识.本文就介绍一下NDK环境搭建及基础编程思想. 本文演示环境:Windows 7 Ultimate+Cy…
我使用的是最新版本的protobuf(protobuf-2.6.1),编程工具使用VS2010.简单介绍下google protobuf: google protobuf 主要用于通讯,是google出的一个结构化信息传递工具,有着效率高.占存储少的优点,常被用于网络通讯. Google protobuf主要是针对Linux下的开发,但是为了照顾windows的开发人员,google也给出了相应的方案. windows下,需要下载两个包protobuf-2.6.1.tar.bz2和protobu…
浅谈Windows环境下DOS及MS-DOS以及常见一些命令的介绍 前记 自己是搞编程的,首先我是一个菜鸟,接触计算机这么久了,感觉很多计算机方面的技术和知识朦朦胧胧.模模糊糊,貌似有些贻笑大方了:所以最近腾出了点时间来了解计算机的基础知识,准备整理整理这些知识,我想也为时不晚. 说来整理,其实并非一件易事,各人的视野都是有限的,当然“百事通”我是做不来的,还是实实在在的拿出来分享分享,贻笑贻笑大方,让大家拍拍板砖也未尝不可. 为什么要学习批处理? 首先,我是一个后生,自从接触计算机就一直使用的…
google protocol buffer的使用和原理 概况: Protocol Buffers(也就是protobuf)是谷歌的语言中立的.平台中立的.可扩展的用于序列化结构化的数据: windows环境下的安装与使用: protocol编译器 安装.安装protocol编译器,用来编译.proto文件: 下载.路径:https://github.com/google/protobuf/releases.里面有windows版的:protoc-3.6.1.win32.zip. 安装. 下载完…
在windows环境下,我们可以使用一些系统内置的快捷键来快速启动我们想要的应用程序,我这里举例几个我经常使用的,比如: 快捷键 功能说明 services.msc  查看系统服务 gpedit.msc  打开组策略 regedit 注册表 devmgmt.msc 设备管理器 cleanmgr  磁盘清理 compmgmt.msc 计算机管理 dcomcnfg 组件服务 OptionalFeatures 打开或关闭windows 功能 Calc  打开计算机 notepad 打开记事本 writ…
Windows环境下python的安装与使用 一.python如何运行程序 首先说一下python解释器,它是一种让其他程序运行起来的程序.当你编写了一段python程序,python解释器将读取程序,并按照其中的命令执行,得出结果,实际上,解释器是代码与机器的计算机硬件之间的软件逻辑层. 通俗来说,我们的计算机是基于二进制进行运算的,无论你用什么语言来写程序,无论你的程序写的多么简单或多么复杂,最终交给计算机运行的一定是 0或1,因为计算机只能识别0和1. 我们目前使用的大多数编程语言都是高级…
参考文章: https://blog.csdn.net/qq_38198744/article/details/80261695 前文说过如何在Ubuntu环境下 为PyQt5  安装MySql驱动, 这里面主要说的是如何在Windows环境下安装MySql驱动. # -*- coding: utf-8 -*- ''' [简介] PyQt5中 处理database 例子 ''' import sys from PyQt5.QtCore import * from PyQt5.QtGui impo…
如何在Windows环境下安装Linux系统虚拟机 本篇经验写给想要入门学习C语言的小白们.Windows系统因为使用窗口图形化,操作简单,功能多样,所以我们在Windows环境下可以做到很多,但想要学习正统的C语言程序编辑我们还是要回归到Linux系统环境,因为C语言最适合做的就是Linux嵌入式这类的小程序,所以还是得在Linux环境下才能发挥它真正的威力. 但我们一般家庭使用的台式电脑和笔记本电脑都是Windows内核,所以就有必要学会如何在Windows系统下为我们的C语言编程构建一个L…
浏览器中的代理server设置 Windows系统接口提供的代理server设置是一个全局的代理server的设置,如图所看到的,这里就不多解释: 各个浏览器在使用代理设置的时候,能够主动地获代替理设置亦或是不使用该代理设置,比如Chrome浏览器假设要使用代理设置,仅仅能在图中所看到的的位置进行更改,所以简单地(不使用辅助性工具)为Chrome设置代理,仅仅能通过更改系统全局代理设置(当然此时不会影响不使用该代理设置的进程).如图: 而360浏览器能够有几种选择: 它能够使用自己程序配置的代理…
为什么不呢?我们有了RPC/RMI和MAP,为什么不能在windows环境下处理大数据呢?windows是迄今为止最普及的操作系统,据市调公司NetMarketShare最新(2019年5月)统计数据,在桌面操作系统方面,目前Windows 10的市场占有率已达45.73%.而Windows 7的市场占有率为35.44%.排在第三位的是Windows 8.1,市场份额为3.97%.这三个版本的windows市场占有率之和为:85.14%.可以说windows占据了绝大多数用户的心.这与windo…
在windows环境下搭建jmeter的压测实验环境,需要对操作系统默认的一些个参数进行设置,以提高并发能力.特别是作为压力机的时候. Socket 编程时,单机最多可以建立多少个 TCP 连接,受到操作系统的影响. Windows 下单机的TCP连接数受多个参数影响: 最大TCP连接数 [HKEY_LOCAL_MACHINE \System \CurrentControlSet \Services \Tcpip \Parameters] TcpNumConnections = 0x00ffff…
摘要:iOS开发中,开发者不仅要做好iOS的内存管理,而且如果你的iOS涉及多线程,那你也必须了解iOS编程中对多线程的限制,iOS主线程的堆栈大小为1M,其它线程均为512KB,且这个限制开发者是无法用任何方式改变的.本文就详细阐述iOS开发中多线程的原理及实践. 一.线程概述 有些程序是一条直线,起点到终点:有些程序是一个圆,不断循环,直到将它切断.直线的如简单的Hello World,运行打印完,它的生命周期便结束了,像昙花一现那样:圆如操作系统,一直运行直到你关机. 一个运行着的程序就是…
  因为本文的内容大部分是以生产者/消费者模式来进行讲解和举例的,所以在开始学习本文介绍的几种线程间的通信方式之前,我们先来熟悉一下生产者/消费者模式.   在实际的软件开发过程中,经常会碰到如下场景:某个模块负责产生数据(可能是消息.文件.任务等),这些数据由另一个模块来负责处理.产生数据的模块,就形象地被称为生产者:而处理数据的模块,就被称为消费者.   单单抽象出生产者和消费者,还称不上是生产者/消费者模式.该模式还需要有一个缓冲区处于生产者和消费者之间来作为一个中介.生产者把数据放入缓冲…