linux第12天 线程
今天主要学习了共享内存,信号量的封装,还有线程.
POSIX线程库
与线程有关的函数构成了一个完整的系列,绝大多数函数的名字都是以“pthread_”打头的
要使用这些函数库,要通过引入头文<pthread.h>
链接这些线程函数库时要使用编译器命令的“-lpthread”选项
pthread_create函数
功能:创建一个新的线程,在主线程里调用
原型
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
参数
thread:返回线程ID
attr:设置线程的属性,attr为NULL表示使用默认属性
start_routine:是个函数地址,线程启动后要执行的函数
arg:传给线程启动函数的参数
返回值:成功返回0;失败返回错误码,而不是设置全局变量errno
pthread_exit函数
功能:线程终止,在线程函数里调用,参数代表返回值,用于给主线程传数据,在线程函数里return也一样
原型
void pthread_exit(void *value_ptr);
参数
value_ptr:value_ptr不要指向一个局部变量, 。
返回值:无返回值,跟进程一样,线程结束的时候无法返回到它的调用者(自身)
pthread_join函数
功能:等待线程结束,在主线程里调用
原型
int pthread_join(pthread_t thread, void **value_ptr);
参数
thread:线程ID
value_ptr:它指向一个指针,后者指向线程的返回值
void *p = NULL;
pthread_join(tid, &p);这样调用
返回值:成功返回0;失败返回错误码
pthread_self函数
功能:返回线程ID,在线程函数里调用
原型
pthread_t pthread_self(void);
返回值:成功返回0
pthread_cancel函数
功能:取消一个执行中的线程
原型
int pthread_cancel(pthread_t thread);
参数
thread:线程ID
返回值:成功返回0;失败返回错误码
posix互斥锁api
- 互斥锁机制主要包括下面的基本函数。
- 互斥锁初始化:pthread_mutex_init()
- 互斥锁上锁:pthread_mutex_lock()
- 互斥锁判断上锁:pthread_mutex_trylock()
- 互斥锁解锁:pthread_mutex_unlock()
- 消除互斥锁:pthread_mutex_destroy()
创建一个锁
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_init(&mutex );
临界区,同时只有一个线程能在里面运行
pthread_mutex_unlock(&mutex);