随笔分类 -  多线程

摘要:一、原因分析 CreateThread()函数是Windows提供的API接口,在C/C++语言另有一个创建线程的函数_beginthreadex(),我们应该尽量使用_beginthreadex()来代替使用CreateThread(),因为它比CreateThread()更安全。 其原因首先要从 阅读全文
posted @ 2018-06-04 21:21 ay-a 阅读(3218) 评论(0) 推荐(1)
摘要:一、概述 生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间 阅读全文
posted @ 2018-06-04 21:04 ay-a 阅读(2064) 评论(0) 推荐(0)
摘要:一、PV原语介绍 PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。 信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取 阅读全文
posted @ 2018-06-03 21:21 ay-a 阅读(1577) 评论(0) 推荐(0)
摘要:如果你看到了这里,我就认为你已经对掌握了有关关键段 CriticalSection、互斥量Mutex和事件Event有关的内容,所以最基本的东西就不再介绍了。如果没有掌握上面说的内容,可以看这里: 1. "关键段 CriticalSection" 2. "互斥量Mutex" 3. "事件Event" 阅读全文
posted @ 2018-06-03 20:44 ay-a 阅读(4457) 评论(0) 推荐(0)
摘要:前面说的互斥量Mutex与关键段CriticalSection都不能实现线程的同步,只能实现互斥,接下来我们用时间event就可以实现线程的同步了,事件也是一个内核对象。 一、相关函数说明 (一) 创建事件 1.函数原型 2.参数说明 第一个参数表示安全控制,一般直接传入NULL。 第二个参数确定事 阅读全文
posted @ 2018-05-30 22:59 ay-a 阅读(5801) 评论(0) 推荐(1)
摘要:一、关键段CS 和 互斥量Mutex 的相同点:都有线程拥有权 关键段和互斥量都有线程拥有权,即可以被一个线程拥有。在 "前面讲关键段CS的文章" 中有说到,关键段结构体的第四个参数保存着拥有该关键段的线程的句柄,具体如下: 第一个参数:PRTL_CRITICAL_SECTION_DEBUG Deb 阅读全文
posted @ 2018-05-16 23:23 ay-a 阅读(1068) 评论(0) 推荐(0)
摘要:一、互斥量 互斥量是windows的一个内核对象,互斥量与关键段的作用相似,可以用来确保全局资源的互斥访问。并且互斥量可以用在不同的进程中的线程互斥访问全局资源。 二、相关函数说明 使用互斥量Mutex主要用到以下四个函数,下面将介绍这四个函数。 (一) 创建互斥量 1. 函数原型 2.参数说明 第 阅读全文
posted @ 2018-04-16 23:25 ay-a 阅读(5659) 评论(0) 推荐(0)
摘要:一、问题回顾 我们 "上一篇" 文章最后的程序的输出 g_Count 的值不是每次都正确,原因是没有对全局资源 进行互斥访问(就是同一时刻只能由一个线程访问),接下来我们就来说一下使用关键段来给全局资源加锁以实现互斥访问。 这是上一篇中的程序: 第一个参数:PRTL_CRITICAL_SECTION 阅读全文
posted @ 2018-04-12 22:55 ay-a 阅读(3725) 评论(0) 推荐(0)
摘要:一、分析上一篇程序的现象 我们先从 "上一篇" 文章中的最后一个程序开始分析。 c++ include include const unsigned int THREAD_NUM = 10; DWORD WINAPI ThreadFunc(LPVOID); int main() { printf(" 阅读全文
posted @ 2018-04-11 23:11 ay-a 阅读(3629) 评论(0) 推荐(0)
摘要:多线程编程中,有时我们需要等待某一线程完成了特定的操作后再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回。只要是Wind 阅读全文
posted @ 2018-04-09 23:06 ay-a 阅读(8089) 评论(0) 推荐(2)
摘要:一 线程创建函数 CreateThread 修改说明: "这里" 说了另一种创建线程方法,使用_beginthreadex()更安全的创建线程,在实际使用中尽量使用_beginthreadex()来创建线程,在博客中使用 CreateThread()l来创建线程其实是一种不太好的方法,不过这里只做原 阅读全文
posted @ 2018-04-09 21:32 ay-a 阅读(65207) 评论(0) 推荐(8)