- 博客(18)
- 收藏
- 关注
原创 多线程之Timer类
Elapsed 到达间隔时发生,触发OnTimedEvent方法。AutoReset: 重复执行 默认true。Enabled: 是否出发 默认true。
2023-11-17 09:36:03
72
1
原创 多线程之ManualResetEvent关键字
ManualResetEvent: 类似打开闸门,在此期间,线程可以自由运行,一但闸门关闭,相关线程应运行到wait位置。1. 启动三个线程 分别执行5,6,12秒。3. thread 1 等待闸门打开。5. 主线程打开闸门 2s。6. thread1 进门。8. 主线程打开闸门2s。2. 主线程工作6秒。7. 主线程关闭闸门。9. 主线程关闭闸门。
2023-11-12 17:48:03
55
原创 多线程之AutoResetEvent关键字
AutoResetEvent 用来进行线程同步,当WaitOne时,阻止当前进程,当Set()时,Are继续执行。通过子线程和主线程的配合使用AutoResetEvent,对主线程和工作线程进行线程同步。4. 发送信号量给 mainAre,使子线程继续进行。2. 发送信号量给workAre,使主线程继续执行。5 WorkerAre程阻止主线程阻止主线程。1. WorkerAre程阻止主线程。3. mainWre阻止子线程。// 6. 发送信号量给5。
2023-11-12 16:32:17
53
原创 多线程之SemaphoreSlim关键字
SemaphoreSlim是对访问资源的线程数,进行限制。1. 声明 SemaphoreSlim 变量。2. 阻止当前线程,直到它可以进入。启动第 Thread+i 个线程。3. 释放线程可进入线程个数。
2023-11-12 16:07:25
86
原创 多线程之Monitor关键字
1. 锁定第一个对象,一秒后锁定第二个对象。3. 始终获取不到lock1的锁,处于挂起状态。1. 锁定第一个对象,一秒后锁定第二个对象。4. 由于死锁,获取锁timeout了。3. 规定时间内,获取排他锁。2. 锁定第二个对象。2. 锁定第二个对象。
2023-11-12 10:50:00
81
原创 其他排序之奇偶排序
/ 2. 第二趟对所有的奇数索引 q,比较 a[q]和 a[q+1],若 a[q]>a[q + 1]// 1. 第一趟对所有的偶数索引 p,比较 a[p]和 a[p + 1]
2023-11-07 07:06:38
51
原创 基础排序之归并排序
归并排序也是比较容易理解的,归并排序采用了分治的思想,把待数组分成左右两部分并对子问题进行排序。代码量最多的地方是Merge()函数。合并之后的数组:[1,2,3,4,5,6]
2023-11-06 14:08:48
48
原创 基础排序之快排
快速排序的过程理解起来也是比较简单,需要具有递归的思维加上一点点类似插入排序的操作即可。子问题解决后,整体问题也就解决了。,5,6: 第一趟的最后结果。
2023-11-06 06:57:38
48
原创 基础排序之计数排序
1. 声明count 数组,取值范围[0..99]2. 对nums[i]在对应的index上进行计数。4. 同一个数字的数目减一。
2023-11-05 11:27:17
44
1
原创 基础排序之冒泡排序
冒泡排序比较容易理解,就是逐一将大值元素向后交换。2. 在[0,i)中,逐一将大值元素向后交换。从外层看: [4,5,7,2,3,1,6]1. 使用i来控制指向数组的位置;第一趟: 4,5,2,3,1,第三趟 2,3,1,
2023-11-05 10:52:54
57
1
原创 基础排序之堆排序
如果i不等于largest 说明需要调整,1. 将i与largest进行交换;2. 再次对largest进行递归调整。1. 从最后一个节点索引len-1的父节点(len-1)/2 = len/2-1开始, 来维护堆的性质;2. 根据堆性质,将堆顶元素与最后一个元素交换后,维护堆性质,这样最后一个元素就是排序的最大/小值。大顶堆调整节点: lson < len && nums[largest]< nums[lson]完全二叉树,且已知节点为 i。其父节点(i-1)/2。其左孩子i*2+1;
2023-11-04 05:48:24
51
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人