线程的笔记

来源:互联网 发布:python map数据结构 编辑:程序博客网 时间:2024/06/07 01:33

线程是进程的一个实体,是CPU调度和分派的基本单位是比进程更小的能独立运行的基本单位。它是程序执行的最小单位,是进程里的一个执行路径,多个线程共同拥有系统资源,但是一个线程基本不拥有系统资源,只有运行中必不可少的资源。

线程包含:一个指向当前被执行指令的指令指针、一个栈、一个寄存器的集合、一个私有的数据区

线程的优点:
1、开销少,进程一般是线程的30倍的开销,
     2、线程通信简单,因为一个进程下的多个线程是共享进程的所有的资源,所以操作简单

线程的缺点:
1、会有额外的CPU开销,因为在管理线程时,系统的使用会给系统带来上下文切换的额外负担。
2、等待使用这些共享资源会使程序的运行速度变慢
3、线程的死锁
4、对公有变量的同时的读或写,会出现数据被修改,而且当公用变量的读写操作是非原子时,不同的机器会导致数据操作产生错误。

适用场合:
1、各个任务必须等待外部资源时(如远程程序或Internet连接)
2、耗时或大量占用处理器的任务阻塞用户界面操作
    注意:因为pthread的库不是Linux系统的库,所以在进行编译的时候要加上“-lpthread”.

线程的创建:
pthread_create()
功能:创建线程
头文件: #include <pthread.h>
原型:int pthread_create(pthread_t *thread,pthread_attr_t *atrr,(void *)(*start_routine)(void *),(voiid *)arg)
说明:thread:线程标识符
   attr:线程的属性,一般为NULL
   start_routine:线程的执行程序
   arg:传递在执行函数的参数
返回值:成功,返回0;出错,返回<0,并输出错误代码



     线程的退出:
pthread_exit()
功能:退出线程
头文件: #include <pthread.h>
原型:void pthread_exit(void *retval)
说明:retval:函数线程的返回指针
返回值:成功,返回0;失败,返回-1


线程的等待
pthread_join()
功能:阻塞调用的线程,直到指定的线程结束
头文件:#include <pthread.h>
原型:int pthread_join(pthread *thread,void **pthread_return)
说明:pthread_return:线程退出返回的指针
返回值:成功,返回0;错误,返回<0

线程的正常退出方法:
1、线程从启动例程中退出
2、被另一个进程退出
3、线程自己调用pthread_exit
在任一个线程中调用exit或_exit,整个进程都会终止
mutex互斥锁线程控制:
互斥锁是用一种简单的加锁方法来控制对共享资源的原子操作。
互斥锁只有两种状态,也就是上锁和解锁,可以把互斥锁看作某种意义上的全局变量。
在同一时刻只能有一个线程掌握某个互斥锁,拥有上锁状态的线程能够对共享资源进行操作。若其他线程希望上锁一个已经被上锁的互斥锁,则该线程就会挂起,直到上锁的线程释放掉互斥锁为止。


初始化:
pthread_mutex_init()
功能:初始化互斥锁
头文件:#include <pthread.h>
原型:int pthread_mutex_init(pthread_mutex_t *mutex,pthread_mutexattr_t *mutexattr)
说明:mutex:互斥锁
mutexattr:PTHREAD_MUTEX_INITIALIZER:创建快速互斥锁
PTHREAD_RECUSIVE_MUTEX_INITIALIZER_NP:创建递归互斥锁
PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP:创建检错互斥锁
返回值:成功,返回0;出错,返回错误码

互斥锁线程控制:
功能:对互斥锁进行控制操作
头文件:#include <pthread.h>
函数:int pthread_mutex_lock(pthread_mutex_t *mutex)
int pthread_mutex_trylock(pthread_mutex_t *mutex)
int pthread_mutex_unlock(pthread_mutex_t *mutex)
int pthread_mutex_destroy(pthread_mutex_t *mutex)
返回值:成功,返回0;失败,返回-1

0 0