Multi Threading
文章平均质量分 85
Vincent乐
计算机视觉、机器学习、深度学习
展开
-
同步函数与异步函数
1. 同步函数与异步函数什么是同步函数?什么是异步函数?它们在线程中执行时会对线程有何影响?一个线程如何与一个异步执行的函数进行同步?依据微软的MSDN上的解说:(1) 同步函数:当一个函数是同步执行时,那么当该函数被调用时不会立即返回,直到该函数所要做的事情全都做完了才返回。(2) 异步函数:如果一个异步函数被调用时,该函数会立即返回尽管该函数规定的操作任务还没有完成转载 2013-01-03 19:00:09 · 1564 阅读 · 0 评论 -
多线程14: 关键段,事件,互斥量,信号量的“遗弃”问题
这篇文章对Windows系统下常用的线程同步互斥机制——关键段、事件、互斥量、信号量进行了总结。有网友问到互斥量能处理“遗弃”问题,事件和信号量是否也能处理“遗弃”问题。因此本文将对事件和信号量作个试验,看看事件和信号量能否处理“遗弃”问题。 一.什么是“遗弃”问题在《秒杀多线程第七篇 经典线程同步 互斥量Mutex》讲到了互斥量能处理“遗弃”问题,下面引用原文:互斥量常用于多进程转载 2013-08-22 17:36:17 · 12233 阅读 · 0 评论 -
多线程16: 多线程笔试面试题汇总
第一篇 多线程笔试面试题汇总 多线程在笔试面试中经常出现,下面列出一些公司的多线程笔试面试题。首先是一些概念性的问答题,这些是多线程的基础知识,经常出现在面试中的第一轮面试(我参加2011年腾讯研究院实习生招聘时就被问到了几个概念性题目)。然后是一些选择题,这些一般在笔试时出现,虽然不是太难,但如果在选择题上花费大多时间无疑会对后面的编程题造成影响,因此必须迅速的解决掉。最后转载 2013-08-22 17:38:53 · 12018 阅读 · 0 评论 -
多线程12: 多线程同步内功心法——PV操作上
上面的文章讲解了在Windows系统下实现多线程同步互斥的方法,为了提高在实际问题中分析和思考多个线程之间同步互斥问题的能力,接下来将讲解PV操作,这也是操作系统中的重点和难点。本文将会先简要介绍下PV操作的来源和基本使用方法,然后再通过两道经典的计算机考研真题——放水果和安全岛来示范如何运用PV操作。 先讲讲PV操作的起源和用法。1962年,荷兰学者Dijksrta在参与X8计算机的转载 2013-08-22 17:33:14 · 4024 阅读 · 0 评论 -
多线程9:生产者消费者问题
继经典线程同步问题之后,我们来看看生产者消费者问题及读者写者问题。生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区原创 2013-08-22 17:13:10 · 10001 阅读 · 0 评论 -
多线程15: 多线程十大经典案例之一 双线程读写队列数据
《多线程十大经典案例之一双线程读写队列数据》案例描述:MFC对话框中一个按钮的响应函数实现两个功能:显示数据同时处理数据,因此开两个线程,一个线程显示数据(开了一个定时器,响应WM_TIMER消息按照一定时间间隔向TeeChart图表添加数据并显示)同时在队列队尾添加数据,另一个线程从该队列队头去数据来处理。本案例来源于http://bbs.csdn.net/topics/390383转载 2013-08-22 17:37:38 · 12485 阅读 · 0 评论 -
多线程13: 读者写者问题继 读写锁SRWLock
在前面的文章中我们使用事件和一个记录读者个数的变量来解决读者写者问题。问题虽然得到了解决,但代码有点复杂。本篇将介绍一种新方法——读写锁SRWLock来解决这一问题。读写锁在对资源进行保护的同时,还能区分想要读取资源值的线程(读取者线程)和想要更新资源的线程(写入者线程)。对于读取者线程,读写锁会允许他们并发的执行。当有写入者线程在占有资源时,读写锁会让其它写入者线程和读取者线程等待。因此用读写锁转载 2013-08-22 17:35:03 · 5004 阅读 · 0 评论 -
多线程11:读者写者问题
与上一篇《秒杀多线程第十篇 生产者消费者问题》的生产者消费者问题一样,读者写者也是一个非常著名的同步问题。读者写者问题描述非常简单,有一个写者很多读者,多个读者可以同时读文件,但写者在写文件时不允许有读者在读文件,同样有读者在读文件时写者也不去能写文件。上面是读者写者问题示意图,类似于生产者消费者问题的分析过程,首先来找找哪些是属于“等待”情况。第一.写者要等到没有读者时才能去写文件。原创 2013-08-22 17:30:25 · 10330 阅读 · 0 评论 -
多线程8:经典线程同步总结 关键段 事件 互斥量 信号量
原文地址:http://blog.csdn.net/morewindows/article/details/7538247(在原文基础上有所修改)下面对它们作个总结,帮助大家梳理各个知识点。 首先来看下关于线程同步互斥的概念性的知识,相信大家通过前面的文章,已经对线程同步互斥有一定的认识了,也能模糊的说出线程同步互斥的各种概念性知识,下面再列出从《计算机操作系统》一书中选取的一些关原创 2013-08-21 21:51:03 · 3237 阅读 · 0 评论 -
多线程7:经典线程同步 信号量Semaphore
前面介绍了关键段CS、事件Event、互斥量Mutex在经典线程同步问题中的使用。本篇介绍用信号量Semaphore来解决这个问题。首先也来看看如何使用信号量,信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个CreateSemaphore函数功能:创建信号量函数原型:HANDLECreateSemaphore( LPS原创 2013-08-21 21:04:31 · 9932 阅读 · 0 评论 -
多线程6:经典线程同步 事件Event
原文地址:http://blog.csdn.net/morewindows/article/details/7445233(原文基础上有所修改)上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”特性所以关键段只能用于线程的互斥而不能用于同步。本篇介绍用事件Event来尝试解决这个线程同步问题。首先介绍下如何使用事件。事件Event实际上是个内核对象,它原创 2013-08-21 16:41:35 · 9878 阅读 · 0 评论 -
多线程4:经典线程同步 关键段CS
上一篇《秒杀多线程第四篇 一个经典的多线程同步问题》提出了一个经典的多线程同步互斥问题,本篇将用关键段CRITICAL_SECTION来尝试解决这个问题。本文首先介绍下如何使用关键段,然后再深层次的分析下关键段的实现机制与原理。关键段CRITICAL_SECTION一共就四个函数,使用很是方便。下面是这四个函数的原型和使用说明。函数功能:初始化函数原型:voidInit原创 2013-08-21 12:31:09 · 9670 阅读 · 0 评论 -
sleep和wait的区别
1、来自不同的类这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类。sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线程里调用了b的sleep方法,实际上还是a去睡觉,要让b线程睡觉要在b的代码中调用sleep。www.2cto.com2、有没有释放锁(释放资源)最主要是sleep方法没有释放锁,而wait方原创 2013-08-20 20:43:50 · 3512 阅读 · 0 评论 -
多线程2:原子操作 Interlocked系列函数
原文地址:http://blog.csdn.net/morewindows/article/details/7429155(略有修改)上一篇《多线程第一次亲密接触 CreateThread与_beginthreadex本质区别》中讲到一个多线程报数功能。为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是否运行出错。这也非常类似于统计一个网站每天有多少用户登录,每个原创 2013-08-21 09:42:14 · 10009 阅读 · 0 评论 -
多线程3:一个经典的多线程同步问题
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,现在来个复杂点的。这个问题涉及到线程的同步和互斥,是一道非常有代表性的多线程同步问题,如果能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描述:主线程启动10个子线程并将表示子线程序号的变量地址作为参数传递给子线程。子线程接收参数 -> sleep(50) ->全局变量原创 2013-08-21 10:13:54 · 9565 阅读 · 0 评论 -
多线程1: CreateThread与_beginthreadex创建多线程
本文将带领你与多线程作第一次亲密接触,并深入分析CreateThread与_beginthreadex的本质区别,相信阅读本文后你能轻松的使用多线程并能流畅准确的回答CreateThread与_beginthreadex到底有什么区别,在实际的编程中到底应该使用CreateThread还是_beginthreadex?使用多线程其实是非常容易的,下面这个程序的主线程会创建了一个子线程并等待原创 2013-08-20 20:12:50 · 10601 阅读 · 1 评论 -
C++ 多线程编程 & OpenMP
多线程编程浅析(1)——概述线程,是在进程内部又细分的一个执行单元,他们都是由操作系统来进行划分控制的。系统创建好进程后,实际上就启动执行了该进程的主执行线程,主执行线程以函数地址形式,比如说main或WinMain函数,将程序的启动点提供给Windows系统。主执行线程终止了,进程也就随之终止。每一个进程至少有一个主执行线程,它无需由用户去主动创建,是由系统自动创建的。用户根据需要在转载 2014-01-02 21:49:20 · 11001 阅读 · 0 评论