多线程优点及同步方式

来源:互联网 发布:mac os x lion 10.7 编辑:程序博客网 时间:2024/05/29 03:40

一、多线程优点

1.通常启动一个进程,要为该进程分配独立的地址空间,建立多个数据表来维护进程的代码段、堆栈段和数据段,比较耗费系统资源。一个进程创建多线程可以使用相同的地址空间,共享大部分数据,启动一个线程所花费的空间远远小于进程所需空间,而且启动线程花费的时间也比进程花费时间少很多。

2.线程间通讯方便,以为线程之间具有共同的地址空间,共享大部分数据资源

3.提高应用响应速度,将耗时工作放在非UI线程中处理

4.使多CPU系统更加有效,多线程可在不同的CPU上运行

5.改善程序设计结构,易于理解和阅读



二、线程同步的方式

1.互斥量

linux实现方式:

pthread_mutex_t mutex; 创建互斥量

pthread_mutex_init 初始化互斥量,初始化时可设置不同的互斥量属性,来区分互斥量是用于线程间还是进程间

pthread_mutex_lock 申请互斥量

pthread_mutex_unlock 释放互斥量

2.条件变量

linux实现方式:

pthread_cond_t cond; 定义条件变量

pthread_cond_init 初始化条件变量,初始化时可设置条件变量的属性结构,区分条件变量用于线程间还是进程间,通常用于线程间

pthread_cond_wait 使线程阻塞在条件变量上,需与互斥量结合使用

pthread_cond_signal/pthread_cond_broadcast 唤醒线程

3.信号量

信号量本质是一个非负整数,用来控制对公共资源的访问。

linux实现方式:

sem_t sem; 定义信号量

sem_init 初始化信号量,同时可设置信号量用于线程间还是进程间

sem_post  增加资源数量

sem_wait/sem_trywait 获取资源,前者阻塞式,后者非阻塞式

sem_destroy  释放信号量

4.临界区

windows下同步方式,同步速度比较快,但是只能同步同一进程下的多线程

5.事件

0 0