如果把聊天软件看作一个进程,则线程就是发送聊天信息这一个单一动作的其中一个,聊天的过程可以细分为若干的线程,这就是线程。
一、线程函数
1.原型
1 |
|
二、线程同步
1.互斥量
原型:
1 |
|
例子:
1 |
|
2.读写锁
读写锁适合对于数据结构读的次数远大于写的情况。写模式下锁住单一进程进行写动作,读模式下可被多线程进行读取动作。
原型:
1 |
|
例子:
1 |
|
3.条件变量
条件变量和互斥量仪器使用时,允许线程以无竞争的方式等待特定的条件发生。具体表现为调用者把锁住的互斥量传给函数,函数自动把调用线程放到等待条件的线程列表上,对互斥量解锁。满足条件后实施动作并返回时(即pthread_cond_wait返回时),互斥量再次被锁住。
原型:
1 |
|
例子:
条件变量和互斥量一起同步
1 |
|
4.自旋锁
自旋锁和互斥量类似,但他不是通过休眠使进程阻塞,而是在获取锁之前一直处于忙等(自旋)阻塞状态。自旋锁适用于:持锁时间短,而且线程不希望在重新调度上花费太多的成本。
原型:
1 |
|
5.屏障
屏障允许每个线程等待,直到所有的合作线程都到达某一点,然后从这点继续执行。
原型:
1 |
|
例子:
使用8个线程分解800万个数的排序,每个线程使用堆排序,最后合并
1 |
|