场景:
1. 需要统计某个线程的对象上创建的个数.
2. 当创建的堆空间需要根据线程需要创建和结束时销毁时.
3. 因为范围是线程只能看到自己的存储数据,所以不需要临界区或互斥量来维护自己的堆内存. 加入如果用全局std::map实现,那么必须在put和get时加锁,这是很损耗资源的.
4. 可以用在维护一个连接,比如socket,database连接....
分类:
编程语言 时间:
2015-03-01 00:25:18
阅读次数:
273
C++拾遗--多线程:关键段解决子线程的互斥
前言
为了解决子线程的互斥问题,windows系统提出了关键段(CRITICAL_SECTION)的概念。它一共有四个共两对操作:初始化、销毁,进入、离开。它们定义在头文件synchapi.h中。
1.初始化关键段变量
VOID WINAPI InitializeCriticalSection(
LPCRITICAL_SECTION lpCriticalSection
);
2.销毁关键段变量
VOID WINAPI DeleteCrit...
分类:
编程语言 时间:
2015-02-28 23:08:07
阅读次数:
495
进程/线程 同步.(posix)
互斥锁
条件变量
读写锁
记录上锁...
分类:
其他好文 时间:
2015-02-28 21:45:00
阅读次数:
286
IPC的3种技术:
进程(线程)间传递消息的6种接口:
1.管道
2.消息队列
3.过程调用
进程(线程)间同步的6种接口:
1.信号量(两种)
2.互斥量
3.条件变量
4.读写锁
5.记录上锁
进程(线程)间共享内存的2种接口:
1.匿名共享内存
2.有名共享内存...
分类:
系统相关 时间:
2015-02-28 18:40:12
阅读次数:
215
场景:
1. 在多线程程序里,临界区是最常见的同步访问共享资源的最简单的解决方案.
2. pthread是跨平台的线程模型,那么它和本地的线程模型的临界区编程有什么区别呢?...
分类:
编程语言 时间:
2015-02-27 18:27:43
阅读次数:
306
上文讨论了互斥量和条件变量用于线程的同步,本文将讨论读写锁和自旋锁的使用,并给出了相应的代码和注意事项,相关代码也可在我的github上下载。
读写锁
对于互斥量要么是锁住状态要么是不加锁锁状态,而且一次只有一个线程可以对其加锁,而读写锁对线程的读数据加锁请求和写数据加锁请求进行了区分,从而在某些情况下,程序有更高的并发性。对于读写锁,一次只有一个线程可以占有写模式的读写锁,但是多个线程可...
分类:
编程语言 时间:
2015-02-25 17:08:45
阅读次数:
162
浏览器内核常驻线程浏览器 GUI 渲染线程JavaScript 引擎线程浏览器定时触发器线程浏览器事件触发线程浏览器 http 异步请求线程浏览器 GUI 渲染线程 和JavaScript 引擎线程之间是互斥的在debug里面check一下如下代码的效果即可知道var sleep = functio...
分类:
编程语言 时间:
2015-02-24 22:12:35
阅读次数:
285
【资源共享的问题】
例如线程A与B均实现数字Num的加一操作,如果不加以限制,可能A和B先后拿到最初的Num,然后返回Num+1,无法实现Num+1之后再+1。
【互斥锁】
使用互斥锁(@synchronized)来解决,让线程A操作时锁住Num,不允许B的读写,直到A操作完并且写回后,再让B进行工作,再锁住Num,直到B操作完毕,再解开锁,类似于上厕所,在厕所内要锁门一样。
使用@syn...
分类:
编程语言 时间:
2015-02-20 17:31:13
阅读次数:
188
Posix读写锁int pthread_rwlock_init(pthread_rwlock_t *restrict rwlock,
const pthread_rwlockattr_t *restrict attr);
int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);
int pthrea...
分类:
编程语言 时间:
2015-02-19 18:39:41
阅读次数:
229
Posix信号量Posix 信号量有名信号量无名信号量sem_opensem_initsem_closesem_destroysem_unlink sem_waitsem_post 有名信号量#include /* For O_* constants */
#include /* For mode constants */
#include
sem_t *s...
分类:
编程语言 时间:
2015-02-19 17:32:31
阅读次数:
234