多线程浅谈
来源:互联网 发布:淘宝送到国外吗 编辑:程序博客网 时间:2024/06/06 16:32
什么是线程?
线程是"进程"中某个单一顺序的控制流。也被称为轻量进程(lightweight processes)。
为什么使用线程呢?
顾名思义,轻量级进程。一个线程资源的消耗远远低于一个进程,两者相比大概在30倍(不同系统,有差距滴)。更大的优势,线程切换所需时间远低于进程切换。
多线程编程
要使用多线程编程么?用pthread(POSIX thread)吧,可移植性好,简单可依赖。
怎么用?加一个pthread.h的头文件,链接一个静态库libpthread.a
常用函数?百度百科之
线程锁
互斥锁、读写锁、自旋锁
1.常用的当然是互斥锁(pthread_mutex_t)咯,以下几种:
普通锁: 同一线程可重复加锁,解锁一次搞定,等待锁的线程形成队列,先到先得
嵌套锁: 同一线程可重复加锁,解锁同样次数才可释放锁,先等待锁的进程先获得锁
检查锁: 同一线程不能重复加锁,加上的锁只能由本线程解锁,先等待锁的进程先获得锁
自适应锁 :同一线程可重复加锁,解锁一次搞定,所有等待锁的线程自由竞争
2. 读写锁(pthread_rwrock_t),也用的蛮多的,某些场景,很有用的
3. 自旋锁(pthread_spinlock_t),自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁。自旋锁通过持续占用CPU避免线程上下文切换的开销。
条件变量
在某些场合,用起来很high的一个东西
它允许线程阻塞从而等待另一个线程某些条件的方法的弥补了互斥锁的不足
简单的说:互斥锁只有YES/NO两种状态,而条件变量可以表达多种状态
需要注意的是,条件变量只是起到阻塞和唤醒线程的作用,具体的判断条件,还要自己给出。
eg:
pthread_mutex_lock (&count_lock);
while(count==0)
pthread_cond_wait( &count_nonzero, &count_lock);
pthread_mutex_unlock (&count_lock);
- 多线程浅谈
- 浅谈多线程
- 浅谈多线程
- 浅谈多线程
- 浅谈多线程
- 浅谈多线程及其应用
- 浅谈多线程编程
- 浅谈.net中的多线程
- 浅谈Volatile与多线程
- 浅谈-----多线程(一)
- 浅谈-----多线程(二)
- 浅谈-----多线程(三)
- 浅谈-----多线程(四)
- 浅谈-----多线程(五)
- 浅谈Java多线程机制
- 浅谈多线程和异步
- 浅谈iOS多线程编程
- 浅谈IOS多线程
- android中Animation的使用!
- 多线程开发学习笔记(1)
- Ubuntu小技巧全面搜集
- 从 VC7 的 CHtmlView 不能正常退出谈 CComPtr 使用中的一个误区
- jad:反编译工具
- 多线程浅谈
- 代码之丑
- unix学习第一天
- 高手帮忙,关于旋转
- C#中的委托和事件(初稿)
- jquery刷新页面
- 每次打开IE8都要设置
- 表达式运算
- CVS SVN VSS 使用对比