自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(7)
  • 收藏
  • 关注

原创 win32线程学习总结(临界区,互斥体,事件,信号量)

一、临界区 CRITICAL_SECTION例程https://blog.csdn.net/Kwansy/article/details/106485496临界区用于资源互斥访问,性能比互斥体好。二、互斥体 mutex例程https://blog.csdn.net/Kwansy/article/details/106485496互斥体也是用于对资源互斥访问,性能比临界区差,但可以跨进程使用,详见CreateMutex 第三个参数。三、事件 event例程https://blog.csdn

2020-06-29 09:48:49 421

原创 WIN32 多线程吃字母练习

题目大意有1个资源区,2个缓冲区(大小为1),4个吃货,总共有5个线程,其中一个线程从资源区取字母放到缓冲区,哪个缓冲区是空的就往哪放;4个吃货线程,从缓冲区吃字母。该题目要求实现对缓冲区的互斥访问,缓冲区和资源区必须满足“缓冲区为空,才能从资源区取字母”的同步要求,缓冲区和吃货线程要满足“缓冲区不空,吃货才能从缓冲区取字母”的同步要求;除此之外,还要求使用信号量控制吃货线程最大并发数为2.运行结果代码// EatChar.cpp : Defines the entry point for t

2020-06-04 10:45:17 340

原创 WIN32 使用事件实现高效生产者消费者模型

WIN32 如何实现线程同步WIN32 多线程编程中,可以使用临界区(CRITICAL_SECTION)和互斥体(MUTEX)实现线程互斥。但是对于同步问题,如果用上述两种方法实现,效率比较低,原因是它们必须通过条件判断来决定是否使用资源,CPU会不停的调度子线程。于是,为了高效地解决同步问题,WINDOWS提供了事件机制(不是消息循环那个事件)。事件是一种内核对象,使用事件,我们可以完成临界区和互斥体的工作,而且事件可以设置初始通知状态,和是否自动重置通知状态,因此,事件使用起来更加自由,更重要的是,

2020-06-02 12:29:30 414

原创 WIN32 使用 MUTEX 实现禁止多开

WIN32 互斥体 MUTEX 可以跨进程获取,因此可以用它实现简易的防多开,进程启动时尝试获取 MUTEX,如果获取失败说明没有多开,如果获取成功,则提示错误信息。下面是执行结果:第一个程序已经在运行:如果尝试多开,则会弹出错误信息,并退出进程代码// MutexLimitMultiOpen2.cpp : Defines the entry point for the application.//#include "stdafx.h"BOOL CALLBACK DlgProc(HW

2020-06-02 00:59:44 1191 1

原创 WIN32多线程抢红包练习

第一个文本框是奖池,右面三个文本框是三个线程抢到的红包数,程序运行结果如下:解决资源抢占问题,WIN32提供两种方式:临界区和互斥体。临界区和互斥体的对比:1、临界区只能应用于单个进程间的线程控制,互斥体可以跨进程;2、互斥体可以设定阻塞等待超时,临界区不能;3、线程意外终结时,互斥体可以避免死锁;4、互斥体效率比临界区低。临界区实现// RedPack.cpp : Defines the entry point for the application.//#include "st

2020-06-02 00:40:49 451

原创 win32 实现死锁的小例子

死锁的一种情况是两个线程竞争两个锁,需要同时拿到两个锁才能执行,然后出现了两个线程各拿一个锁的情况,这样两个线程就都无法继续执行,称为死锁。避免死锁的方法有很多,有预防死锁,出现死锁后通过某些方法释放锁等。下面是一个死锁的小例子:// 死锁demo#include "stdafx.h"CRITICAL_SECTION cs1, cs2;DWORD WINAPI ThreadA(LPVOID p){ while (TRUE) { printf("A1\n"); EnterCri

2020-06-01 21:46:47 210

原创 windows结束线程的三种方式

结束线程有三种方式一、让线程函数执行到 return二、在线程函数内调用 ExitThread三、调用 TerminateThread其中前两种方式比较类似,它们都是通过修改某个变量来达到改变子线程执行流程,从而实现退出的目的。这两种方式是同步的,安全的,线程退出后会系统会清理堆栈。第三种方式 TerminateThread 是异步的,它会创建一个新的线程去结束我们希望干掉的线程,该函数立即返回,是异步的。如果程序希望线程真的结束,然后再往下走,那么就需要在 TerminateThread 后面

2020-06-01 18:58:17 1413

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除