多线程编程
文章平均质量分 51
以后多线程的学习笔记都放在这里啦
未来会包括Linux和Win的
咖啡与乌龙
这是一个知识分享型宝藏博主,本科测控技术与仪器,研究生仪器科学与技术,自学计算机技术,目前在sangfor担任后台开发工程师,职场新人小菜鸟一枚。欢迎大家关注,相互交流,相互学习,共同进步!!!
展开
-
基于win32的多线程编程01:Windows中的线程ID和线程句柄
Windows中的线程ID和线程句柄1.什么是句柄?本质是指针,在Win中句柄是指向指针的指针typedef void *HANDLE;一个应用程序,组成该程序的众多对象存在内存中一般的理解是,只要获取了对象的内存地址便可以随意操作对象了,但是这个想法是不对的因为Window是一个以虚拟内存为基础的操作系统在Win下,windows的内存管理器经常在内存中移动对象,来满各种应用程序的需要,这就导致对象的地址发生变化为应对这一情况,Windows系统专门在内存中腾出一原创 2021-04-14 21:27:51 · 785 阅读 · 0 评论 -
线程同步---信号量以及与互斥锁构建生产者消费者模型
信号量是用在多线程多任务同步的,通过信号量的资源数来决定是否阻塞线程。信号量可以在没有资源时阻塞线程,也可以主动去增加某个线程所用到的资源数如果信号量的资源数充足,则可能发生多个线程同时访问共享资源,因此需要配合mutex一起使用,进行线程同步...原创 2022-07-09 20:13:33 · 186 阅读 · 0 评论 -
线程同步---条件变量以及结合互斥锁构建生产者消费者模型
条件变量是进行线程阻塞的一种机制,经常和`互斥锁`结合起来处理生产者消费者模型条件变量给多线程提供了一个会合的场所。条件变量与互斥锁一起使用时,允许线程以无竞争的方式等待特定的条件发生条件变量只有满足特定条件(如,任务队列已满或已空)时才会阻塞线程;如果条件不满足,多个线程可以同时进入临界区,同时读写共享资源,因此还是会造成共享资源的混乱;因此条件变量通常要和互斥锁一起使用,利用互斥锁保证线程同步。...原创 2022-07-09 20:09:43 · 166 阅读 · 0 评论 -
线程同步---互斥锁的升级版:读写锁
读写锁的读锁锁定临界区之后,线程对临界区的访问是并行的,读锁是共享的;多个线程可以同时访问被读锁锁定的区域读写锁的写锁锁定临界区之后,线程对临界区的访问是串行的,读锁是独占的;类似互斥锁,写锁被锁定时,其他的线程无法获取锁使用读写锁,同时对两个临界区加了读锁和写锁,两个线程需要同时访两个临界区,此时访问写锁临界区的线程优先执行,因为其优先级高于读锁.........原创 2022-07-09 19:51:39 · 138 阅读 · 0 评论 -
线程同步---互斥锁和用锁不当造成的死锁现象
所谓互斥锁,其实是附加了一个条件,也就是在获得锁的条件下才能运行锁住的代码锁应该是多个线程的共享资源,这样才能起到避免竞争的作用二、死锁1.什么是死锁?死锁:是因为线程在加锁时使用不当,造成的所有的线程都被阻塞的情况,并且线程的阻塞无法被打开,属于无解状态,就是死锁2.死锁场景①加锁之后忘记解锁②重复加锁,造成死锁③程序中有多个共享资源,因此有很多锁,随意加锁,导致互相被阻塞(互锁).........原创 2022-07-09 19:40:23 · 1511 阅读 · 0 评论 -
线程同步与线程同步的必要性
线程同步非常重要,常用的线程同步方式就是加锁。锁是一种非强制机制,每一个线程在访问数据或资源之前都应该获取锁(或者说上锁、lock),并在访问结束之后释放锁(或者说解锁、unlock)。在锁被别的线程占用时,当前线程就需要等待也即是阻塞,直到锁被释放,然后当前线程抢到锁了,才能继续执行。.........原创 2022-07-09 16:57:04 · 422 阅读 · 0 评论 -
线程安全与锁
线程安全与锁1、线程之间的竞争2、原子操作3、同步与锁1、线程之间的竞争1> 假如两个线程都对一个变量有访问和修改,并且修改的这个过程不是原子操作(也即是多步完成),那么就有可能存在线程1正在操作该变量,该变量又被线程2操作,这样将导致数据处理的严重错误2> 这个就是所谓的竞争,解决竞争的方式,有使用原子操作、添加锁;2、原子操作1> 原子操作 : 操作只有一步,不会被其他的操作打断;2> 系统一般会带有一些原子操作的函数留给用户使用,但是数量较少,并且一般只能用于简单原创 2021-01-06 10:23:11 · 130 阅读 · 0 评论 -
基于win32的多线程编程08 :线程之间的同步_信号量_Event事件
线程之间的同步(书接上文)4 Semaphores 信号量系统核心对象与Mutex的区别在于Mutex: 同一时间内只能有一个线程拥有操作的权力Semaphores: 同一时间内可以有多个线程获得目标并操作…当然了,如果设置Semaphores的最大可获取对象为1的话,基本就等价于一个Mutex了使用方法(类似于Mutex)1. 创建一个信号量:CreateSemaphoreHANDLE CreateSemaphoreA( LPSECURITY_ATTRIB原创 2021-04-15 10:34:57 · 179 阅读 · 0 评论 -
基于win32的多线程编程07: 线程之间的同步_原子互锁_关键代码段(临界区)_互斥器
线程之间的同步1 为什么要线程之间进行同步当有多个线程同时对某一块资源进行读写的时候就会发生冲突,例如多个线程都尝试改变一个变量的值,最终会导致数据计算的出错,也即线程竞争简单讲: 两个程序同时读写同一个共享数据时会发生意想不到的后果为了避免这种情况,必须要在程序中采取同步的机制2 线程之间的5种常用同步方式(本文简要介绍前三种)2.1 原子互锁家族的函数我们把单指令的操作称为原子的当我们调用原子操作时,因为其实单条指令形式,所以不会被打断Win API中有一个原子操原创 2021-04-15 10:09:18 · 184 阅读 · 0 评论 -
基于win32的多线程编程06: 几种线程间的通信方式和实现方法(MFC)
线程间的通信1 方式1全局变量定义全局,如下示例中的g_Numint g_Num = 100;UINT __cdecl ThreadWriteProc(LPVOID lpParameter){ while(TRUE) { ++g_Num; // 该线程对全局变量进行修改 Sleep(50); } return 100;}UINT __cdecl ThreadReadProc(LPVOID lpParameter){ CString strTipMsg; while(原创 2021-04-15 09:54:44 · 439 阅读 · 0 评论 -
基于win32的多线程编程05: 挂起 恢复 和线程优先级
1 线程挂起SuspendThread()DWORD SuspendThread( HANDLE hThread);// 参数是需要被挂起的线程句柄// 函数执行成功时.返回值是在本次挂起操作前,该线程被挂起的次数,之后线程的挂起次数加一// 函数执行失败时,返回值为-1.可以进行GetLastError()2 线程恢复ResumeThread()DWORD ResumeThread( HANDLE hThread);// 参数是需要被恢复挂起的线程句柄//原创 2021-04-15 09:14:33 · 185 阅读 · 0 评论 -
基于win32的多线程编程04: 界面线程的创建步骤以及在界面线程中创建模态对话框和非模态对话框
界面线程的创建步骤和以及在界面线程中创建模态对话框和非模态对话框界面线程的创建从CWinThread类派生自己的子类:如,CUIThreadApp重载InitInstance()函数(必须重载),与ExitInstance(可选重载)函数 (类中方法的重载如下所示) 在InitInstance函数中进行界面的创建// 在界面线程类的初始化函数中创建界面BOOL CUIThreadApp::InitInstance()//必须重载{ // TODO: 在此执行原创 2021-04-15 09:08:56 · 384 阅读 · 0 评论 -
基于win32的多线程编程03:MFC中的工作线程与界面线程的区别(还有模态对话框)
工作线程与界面线程的区别1. 区别消息循环工作线程没有消息循环界面线程有消息循环模态对话框模态对话框弹出时,用户不能与其他窗口交互,直到模态对话框关闭。有自己的消息循环不建议在工作线程中创建模态对话框2. 需要了解一下非模态对话框// 模态对话框在创建时,会调用DoModal()方法CMyDlg dlg;dlg.DoModal();// 因为DoModal()方法是阻塞的,所以,模态对话框之后被关闭之后,程序才会继续向下执行非模态对话框UINT __cde原创 2021-04-14 21:49:43 · 188 阅读 · 0 评论 -
基于win32的多线程编程02:创建线程的方式(MFC中和Win32API中)
创建线程的方式(MFC中和Win32API中)1. CreatThread()// 线程创建成功,返回新线程的句柄// 线程创建失败,返回NULL,GetLastError()可以获得错误代码// 默认创建的是工作线程HANDLE CreateThread(NULL, // 默认的安全属性 0, // 默认的堆栈大小 ThreadProc, // 线程处理函数 lpParameters,// 传递给线程函数的参数指针 0, // 创建线程后立即执行原创 2021-04-14 21:32:45 · 222 阅读 · 3 评论