最近在做winform的程序中,需要只能打开一个程序,如果已经存在,则激活该程序的窗口,并显示在最前端。在网上google了一哈,找到了很多的解决方案。这里我整理了3种方案,并经过了测试,现和朋友们分享: 一、使用用互斥量(System.Threading.Mutex) 同步基元,它只向一个线程授予 ...
并发编程(三) >>>思维导图>>>中二青年 GIL全局解释器锁 Cpython解释器:python解释器有很多种,最常见的就是Cpython解释器 GIL本质也是一把互斥锁 将并发变成串行牺牲效率保证数据的安全 用来阻止同一个进程下的多个线程的同时执行 (同一个进程内多个线程无法实现并行但是可以实 ...
分类:
其他好文 时间:
2019-08-14 16:50:15
阅读次数:
85
队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的。从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pthread.condition()),来保证了线程安全。 ?self.mutex互斥锁:任何获取队列的状 ...
分类:
编程语言 时间:
2019-08-13 00:26:11
阅读次数:
111
C++标准库(五)之智能指针源码剖析 _Mutex_base template<_Lock_policy _Lp> class _Mutex_base { protected: enum { _S_need_barriers = 0 }; }; template<> class _Mutex_bas ...
分类:
其他好文 时间:
2019-08-10 19:14:13
阅读次数:
132
1、互斥锁又叫互斥量(mutex) 2、相关函数:pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_unlock 3、互斥锁与信号量的关系:可以认为互斥锁是一种特殊的信号量 4、互斥锁主要用来实现关键段 ...
分类:
编程语言 时间:
2019-08-07 09:19:39
阅读次数:
93
本身不是锁,但是经常和锁结合使用 使用流程: 1. 创建 条件变量:var cond sync.Cond 2. 指定条件变量用的 锁: cond.L = new(sync.Mutex) 3. cond.L.Lock() 给公共区加锁(互斥量) 4. 判断是否到达 阻塞条件(缓冲区满/空) —— fo ...
分类:
其他好文 时间:
2019-08-04 01:15:38
阅读次数:
92
一、Windows临界区的基本用法 CRITICAL_SECTION my_winsc; //定义一个Windows的临界区,相当于一个mutex变量 InitializeCriticalSection(&my_winsc); //初始化 EnterCriticalSection(&my_winsc ...
typedef struct __lock_t { int flag; } lock_t; int TestAndSet(int *ptr, int new) { int old = *ptr; *ptr = new; return old; } void init(lock_t *mutex) { ...
分类:
编程语言 时间:
2019-07-30 00:38:49
阅读次数:
173
一,AQS原理 lock最常用的类就是ReentrantLock,其底层实现使用的是AbstractQueuedSynchronizer(AQS) 简单来说AQS会把所有的请求线程构成一个CLH队列,当一个线程执行完毕(lock.unlock())时会激活自己的后继节点,但正在执行的线程并不在队列中 ...
分类:
其他好文 时间:
2019-07-27 11:16:42
阅读次数:
129
一、互斥量mutex 保护共享数据,操作时,用代码把共享数据锁住,操作数据,解锁。其他线程要操作共享数据的线程必须等待解锁,锁住,操作,解锁。 互斥量就是类对象,一个锁,多个线程用lock()成员函数加锁这个锁头,只有一个线程能锁成功,成功的标志是lock函数返回,如果没有锁成功,那么流程就卡在lo ...
分类:
其他好文 时间:
2019-07-23 17:18:51
阅读次数:
155