
多线程
文章平均质量分 76
ay-a
博客主要还是在博客园写,不定时会同步到优快云来,主要是优快云界面广告太多了,影响体验,同步到这里就当备份。
博客园地址: http://www.cnblogs.com/ay-a/
展开
-
windows多线程(十一) 更安全的创建线程方式_beginthreadex()
一、原因分析CreateThread()函数是Windows提供的API接口,在C/C++语言另有一个创建线程的函数_beginthreadex(),我们应该尽量使用_beginthreadex()来代替使用CreateThread(),因为它比CreateThread()更安全。其原因首先要从标准C运行库与多线程的矛盾说起,标准C运行库在1970年被实现了,由于当时没任何一个操作系统提供...原创 2018-06-04 21:21:00 · 469 阅读 · 0 评论 -
windows多线程(九) PV原语分析同步问题
一、PV原语介绍 PV原语通过操作信号量来处理进程间的同步与互斥的问题。其核心就是一段不可分割不可中断的程序。信号量的概念1965年由著名的荷兰计算机科学家Dijkstra提出,其基本思路是用一种新的变量类型(semaphore)来记录当前可用资源的数量。有两种实现方式:1)semaphore的取值必须大于或等于0。0表示当前已没有空闲资源,而正数表示当前空闲资源的数量;2) semaph...原创 2018-06-03 21:21:00 · 812 阅读 · 0 评论 -
windows多线程(八) 信号量Semaphore
如果你看到了这里,我就认为你已经对掌握了有关关键段 CriticalSection、互斥量Mutex和事件Event有关的内容,所以最基本的东西就不再介绍了。如果没有掌握上面说的内容,可以看这里:关键段 CriticalSection 互斥量Mutex 事件Event一、信号量相关函数说明(一) 创建信号量CreateSemaphore1.函数原型HANDLE WINAP...原创 2018-06-03 20:44:00 · 4382 阅读 · 0 评论 -
windows多线程(七) 事件event
前面说的互斥量Mutex与关键段CriticalSection都不能实现线程的同步,只能实现互斥,接下来我们用时间event就可以实现线程的同步了,事件也是一个内核对象。一、相关函数说明(一) 创建事件1.函数原型HANDLE WINAPI CreateEventW( _In_opt_ LPSECURITY_ATTRIBUTES lpEventA...原创 2018-05-30 22:59:00 · 772 阅读 · 0 评论 -
windows多线程(六) 互斥量Mutex与关键段CriticalSection比较
一、关键段CS 和 互斥量Mutex 的相同点:都有线程拥有权关键段和互斥量都有线程拥有权,即可以被一个线程拥有。在 前面讲关键段CS的文章中有说到,关键段结构体的第四个参数保存着拥有该关键段的线程的句柄,具体如下:typedef struct _RTL_CRITICAL_SECTION { PRTL_CRITICAL_SECTION_DEBUG DebugInfo; ...原创 2018-05-16 23:23:00 · 535 阅读 · 0 评论 -
windows多线程(五) 互斥量 Mutex
一、互斥量互斥量是windows的一个内核对象,互斥量与关键段的作用相似,可以用来确保全局资源的互斥访问。并且互斥量可以用在不同的进程中的线程互斥访问全局资源。二、相关函数说明使用互斥量Mutex主要用到以下四个函数,下面将介绍这四个函数。(一) 创建互斥量1. 函数原型HANDLE CreateMutex( LPSECURITY_ATTRIBUTESlpMute...原创 2018-04-16 23:25:00 · 4765 阅读 · 0 评论 -
windows多线程(四) 关键段 CriticalSection
一、问题回顾我们上一篇文章最后的程序的输出 g_Count 的值不是每次都正确,原因是没有对全局资源 g_Count 进行互斥访问(就是同一时刻只能由一个线程访问),接下来我们就来说一下使用关键段来给全局资源加锁以实现互斥访问。这是上一篇中的程序:#include <stdio.h>#include <windows.h>const unsigned ...原创 2018-04-12 22:55:00 · 389 阅读 · 0 评论 -
windows多线程(三) 原子操作
一、分析上一篇程序的现象我们先从上一篇文章中的最后一个程序开始分析。#include <stdio.h>#include <windows.h>const unsigned int THREAD_NUM = 10;DWORD WINAPI ThreadFunc(LPVOID);int main(){ printf("我是主线程, pid...原创 2018-04-11 23:11:00 · 577 阅读 · 0 评论 -
windows多线程(二) 等待线程返回
多线程编程中,有时我们需要等待某一线程完成了特定的操作后再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回。只要是Windows创建的Object都会被赋予一个状态量。如果Object被激活了,或者正在使用,那么该Obje...原创 2018-04-09 23:06:00 · 2381 阅读 · 0 评论 -
windows多线程(一) 创建线程 CreateThread
一 线程创建函数 CreateThread1. 函数原型: HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPT...原创 2018-04-09 21:32:00 · 685 阅读 · 0 评论 -
windows多线程(十) 生产者与消费者问题
一、概述生产者消费者问题是一个著名的线程同步问题,该问题描述如下:有一个生产者在生产产品,这些产品将提供给若干个消费者去消费,为了使生产者和消费者能并发执行,在两者之间设置一个具有多个缓冲区的缓冲池,生产者将它生产的产品放入一个缓冲区中,消费者可以从缓冲区中取走产品进行消费,显然生产者和消费者之间必须保持同步,即不允许消费者到一个空的缓冲区中取产品,也不允许生产者向一个已经放入产品的缓冲区中再...原创 2018-06-04 21:04:00 · 4940 阅读 · 1 评论