windows 并发与同步 学习笔记】的更多相关文章

测试 5.2 windows 中断与异常 1.外部硬件中断是通过处理器上的中断引脚管或者本地APIC的内置模块来发生的:对于一个处理器,一旦被中单, 某个预先被设定的中断服务例程就被执行! 2.处理器的内部的IDTR寄存器记录着IDT的位置和它的最大限制,IDTR寄存器为48位. 每个中断描述符号是8字节(共64位)对于 软中断的情形,可避免低特权的代码通过软中断的形式 去执行关键的异常或中断处理的代码! 3. APC_LEVEL 一个线程插入一个APC可以打断该线程 DISPATCH_LEVE…
Windows平台下Makefile学习笔记(一) 作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:…
本文转自:http://blog.csdn.net/clever101/article/details/8286066 上次我们学习了怎么用Makefile编译一个控制台工程.这次我们学习一下如何使用Makefile来编译一个win 32的GUI程序.win 32的GUI程序其编译过程大部分和控制台程序一样,不同的是多了一步RC编译器将资源文件编译成res文件,然后在最后一步链接中需要把这个res文件链接到exe文件中. 好,现在让我们在实践中学习吧.新建一个win32 应用程序工程——Win3…
转:http://blog.csdn.net/kjfcpua/article/details/18265441 如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人. Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据. 以下是我入门的学习笔记. 首先,并行!=并发, 两者是不同的,可以参考:http://concur.rspace.googlecode.com/hg/talk/concur.html G…
对<Java虚拟机并发编程>这本书真的是相见恨晚.以前对并发编程只是懂个皮毛,这本书让我对并发编程有了一个全新的认识.所以把书上的知识点做下笔记,以便以后复习使用. 并发与并行 仔细说来,并发和并行是两个不同的概念.但随着多核处理器的普及,并发程序的不同的线程往往会被编译器分配到不同处理器核心上,所以说并发编程与并行对于上层程序员来说是一样的. 并发的风险 饥饿 当一个线程等待某个需要运行时间很长或者永远无法完成的时间发发生,那么这个线程就会陷入饥饿状态.通常饥饿也会被叫做活锁. 解决饥饿的方…
转:http://blog.csdn.net/kjfcpua/article/details/18265475 Go语言并发的设计模式和应用场景 以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide 本文的示例代码在: https://github.com/hit9/Go-patterns-with-channel 生成器 在Python中我们可以使用yield关键字来让一个…
目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object Header)组成,实际上由于对象头概念的特殊结构,还有些可选成分.于是一个对象实际上是分为三部分. OBJECT_HEADER对象头. 数据本体(比如文件对象File Object.Event等) 附加信息(比如Object Header Name Info等) 结构如下: //摘录自 Reactos代码…
本文转自:http://blog.csdn.net/clever101/article/details/8147352 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:第三部分讲述自…
作者:朱金灿 来源:http://blog.csdn.net/clever101 决心学习Makefile,一方面是为了解决编译开源代码时需要跨编译平台的问题(发现一些开源代码已经在使用VS2010开发,但我还没安装VS2010,我想在VS2008下编译这些代码):另一方面源码在服务器端编译的话,使用IDE的方式编译还是不太方便. 本文主要分为三部分:第一部分讲述namke工具使用makefile的用法:第二部分讲述makefile的主要语法:第三部分讲述自己动手实践学习写makefile文件.…
基本概念 并发 可执行程序.进程.线程 学习心得 并发的实现方法 多进程并发 多线程并发 总结 C++标准库 基本概念 (并发.进程.线程)区分C++初级编程和中高级编程 并发 两个或者更多的任务同时进行:一个程序同时执行多个任务,这些任务之间是相互独立的,以往的计算机只有单核CPU的时候,某个时刻只能执行一个任务. 微观上串行,宏观上并行 1.单核CPU操作系统调度,每秒钟进行任务切换,看起来好像是多任务同时进行,实际上通过切换而来.不同任务之间需要的资源不一样,在切换的时候需要保存一些变量,…
转自:http://www.cnblogs.com/wz19860913/archive/2008/08/04/1259807.html 每个线程都有一个“优先级”,范围是0-31,0为最低优先级,31为最高优先级.当系统决定哪个线程需要调度的时候,首先查看是否存在优先级为31的可调度线程,如果存在,就从中选择一个进行调度.当该线程的时间片到达之后,系统查看是否存在另一个优先级为31的可调度线程,如果存在,就调度它. 只要有一个可调度的优先级为31的线程存在,那么系统绝对不会调度优先级为0-30…
win7或者vista默认运行程序是在受限制的环境下运行的,以减轻病毒对于系统的破坏.那么我们怎样才能提升一个进程的权限以至让它在 管理员模式下运行.当然CreateProcess函数没有提供这个功能.相反我们需要调用的是ShellExecuteEx函数:   BOOL ShellExecuteEx(LPSHELLEXECUTEINFO pExecInfo); typedef struct _SHELLEXECUTEINFO { DWORD cbSize; ULONG fMask; HWND h…
转:http://blog.csdn.net/kjfcpua/article/details/18265461 Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } quit <- 0 } func main() { //…
1.同一个资源,同步和非同步的方法可以同时调用 package com.dingyu; public class Y { public synchronized void m1() { System.out.println(Thread.currentThread().getName() + " m1 begin---------"); try { Thread.sleep(5000); } catch (InterruptedException e) { // TODO Auto-g…
centos7挂载windows共享文件夹 练习环境:centos7是安装在台式机的虚拟机,Windows共享文件夹是公司服务器的共享文件夹(已设置好的共享) 步骤 1. 设置挂载点:mkdir /mnt/win          #挂载点可以自己根据喜好设置 2.  mount 挂载 mount -t cifs -o username="共享文件夹的登录账户",password="共享文件夹的共享密码"  //192.168.4.245/备份目录  /mnt/wi…
1.为新建变量赋值: set 变量=值 2.输出变量的值 echo %变量% 3.关闭批处理中命令行的显示(默认是显示命令行的) 在文件開始处增加:echo off 若需又一次显示:echo on 若echo命令行本身也不显示.须要使用@echo off 4.系统当前日期 能够使用系统变量Date获取.比如: set now = %Date% echo %now% 结果显示为:2014/04/18 周五 能够安装指定的格式显示日期:如_2014_04_18 set now=_%DATE:~0,4…
  一.实例的同步方法 public synchronized void add(int value){ this.count += value; } Java 实例方法同步是同步在拥有该方法的对象上: 二.静态方法同步 public static synchronized void add(int value){ count += value; } 静态方法的同步是指同步在该方法所在的类对象(class)上.因为在 Java 虚拟机中一个类只能对应一个类对象(class实例),所以同时只允许一…
                                                                                             并发编程模型 一.并行工作者模型 委派者(Delegator)将传入的作业分配给不同的worker: 每个worker完成整个任务; workers并行运作在不同的线程上,甚至可能在不同的 CPU 上. 缺点: a.处理共享资源复杂: b.worker无状态,需每次重读数据,某些情况下影响性能: c.任务顺序不确…
多事务运行并发问题 在实际应用中,往往是一台(或多台)服务器向无数客户程序提供服务,当服务器查询数据库获取数据时,如果没有采用必要的隔离机制,可能会存在数据库事务的并发问题,下面是一些常见的并发问题分类: 1. 第一类丢失更新:撤销一个事务,其他事务已提交的更新数据覆盖 2. 第二类丢失更新:一个事务覆盖另一个事务已提交的更新数据 3. 脏读:一个事务读到另一个事务未提交的数据 4. 虚读:一个事物读到另一个已提交的新插入数据 5. 不可重复读:事务读到另一个事务已提交的更新数据 下面对这几类并…
参考https://www.cnblogs.com/lilinzhiyu/p/8086235.html 4.1 线程简介 进程:操作系统在运行一个程序时,会为其创建一个进程. 线程:是进程的一个执行单元.在一个进程里可以创建多个线程,这些线程都拥有各自的计数器.堆栈和局部变量等属性,并且能够访问共享的内存变量.(处理器在这些线程上高速切换,让作用者感觉到这些线程在同时执行.) 1. 线程优先级 现代操作系统基本采用时分的形式调度运行的线程,操作系统会分出一个个时间片,线程会分配到若干时间片,当线…
std::atomic std::async std::atomic 一般atomic原子操作,针对++,--,+=,^=是支持的,其他结果可能不支持. 注意 std::atomic<int> g_varibale = 0; .... int f(){ g_varibale = g_varibale +1; //这样的写法有问题 } 很多时候,写程序简单就是美,不太建议把程序写得复杂.多线程程序要求稳定,然后在稳定的基础上去扩展功能. std::async参数详解 async是用来创建一个异步…
std::future的其他成员函数 std::shared_future 原子操作.概念.基本用法 多线程主要是为了执行某个函数,本文的函数的例子,采用如下写法 int mythread() { cout << "my thread start, and thread id is " << std::this_thread::get_id() << endl; std::chrono::milliseconds dura(1000); std::t…
互斥量(mutex)的基本概念 互斥量的用法 lock(), unlock() std::lock_guard类模板 死锁 死锁演示 死锁的一般解决方案 std::lock()函数模板 std::lock_guard的std::adopt_lock参数 互斥量(mutex)的基本概念 线程保护共享数据,操作时,某个线程用代码把共享数据锁住,其他想操作共享数据的线程必须等待:等待解锁,其他线程才能继续操作共享数据. 1)锁定住 2)操作 3)解锁 "互斥量"的基本概念,互斥量是个类对象,…
手动下载了Symbols,设置好了Symbols File Path,串口连接上了以后,出现ERROR: Symbol file could not be found, 并且会一直不停的出现windbg endIng Service while Service Started这句话, 但是启动服务,在这里能看到打印输出,但是断点调试窗口出不来 解决方法就是在windbg中敲几行命令,步骤如下: 1. 若符号存在D:\DebugSymbols,输入命令: .sympath SRV*d:\Debug…
安装书中第一章成功安装first服务之后,在cmd窗口使用命令行 "net start first" 时, 出现 "发生系统错误 1275.此驱动程序被阻止加载" 后来多方查找,发现问题 WIN7 X64系统中对驱动程序要求有数字签名,否则无法正常使用 解决方法如下: 64位win7禁用驱动程序签名强制 开机之后在登录等待界面按下F8键,进入Windows系统的高级启动项,我们会发现与原有的XP系统多了一些不同的地方,最后一项中为禁用驱动程序签名强制,按照此项进入系…
系统环境:win7 编译环境:Windows Win7 IA-64 Checked Build Environment 按照书中所说的步骤,出现如下问题 后来直接使用光盘源码,编译成功,于是对照源文件, 发现srouces文件中少了TARGETPATH=obj 于是将此句添加至srouces文件末尾,编译还是失败 继续找问题,后来发现build之前将前一次build出来的文件全部删除再build,就成功了 弄习惯c#了,才刚开始弄驱动就觉得忒麻烦,呵呵,坚持就是胜利…
1.ReentrantLock的简单使用 Reentrant n.再进入 ReentrantLock 一个可重入互斥Lock具有与使用synchronized方法和语句访问的隐式监视锁相同的基本行为和语义,但具有扩展功能.(从jdk1.8中文版复制而来) 可以完成synchronized相同的作用,但必须手动释放锁 package com.dingyu2; import java.util.concurrent.locks.Lock; import java.util.concurrent.lo…
async future packaged_task promise async std:async 是个函数,用来启动一个异步任务,启动起来一个异步任务之后,返回一个std::futre对象,启动一个异步任务,就是自动创建一个线程并开始执行对应的线程入口函数,它返回一个std::future对象,这个std::future对象里面就含有线程入口函数返回的结果.可以通过调用future对象的成员函数get来获取结果. "future" 提供了一种访问异步操作结果的机制,程序运行的结果,…
condition_variable wait() notify_one notify_all condition_variable 条件变量的实际用途: 比如有两个线程A和B,在线程A中等待一个条件满足,(消息队列中有要处理的消息),线程B专门往队列中丢数据.当B往线程中放入数据,同时B通知线程A,开始往下执行.在服务器的后台设计中,有一个线程,阻塞式地读取消息,并且将其解析,放入队列中,此时线程B还通知A,要从队列中去拿请求,并进行处理. a) socket技术使得服务器中的程序能够像打开文…
设计模式 共享数据分析 call_once 设计模式 开发程序中的一些特殊写法,这些写法和常规写法不一样,但是程序灵活,维护起来方便,别人接管起来,阅读代码的时候都会很痛苦.用设计模式理念写出来的代码很晦涩,国内的05~10年的时候有一本"Head First",写程序的时候谈到设计模式. 项目开发经验+模块开发经验=设计模式 先有开发需求,然后把一个大的工程拆分很很多小的模块,然后演变出设计模式.当设计模式传到国内来的时候,很多程序员写代码把设计模式往代码中套,使得一个很小的程序的变…