1.线程的基本函数形式
pthread_xxx(),在linux环境下,通常函数的返回值有一个约定,即失败返回-1,成功返回0。而在线程的一系列函数中,成功返回0,而失败返回错误代码,所以在进行函数执行情况判断是,不能判断是否等于-1,而应该判断是否等于0。
创建线程
int pthread_create(pthread_t * thread , pthread_attr_t * attr, void *(*start_routine)(void *), void * arg);
thread:指向pthread_t类型的指针,pthread_t类型是用于描述新创建的线程的类型
attr:用于设置线程的属性,若不需要特殊的属性,则将其简单设为NULL
start_routine:线程函数的其实地址
arg:线程函数的参数
终止线程
void pthread_exit(void * retval);
retval:指向线程所要返回对象的指针,注意不能让retval指向局部的变量
线程同步
int pthread_join(pthread_t thread, void **thread_return)
thread:线程的描述符
thread_return:一个指向指针的指针,第二级指针指向的是线程所要返回的对象
以上函数的使用,基于必须include <pthread.h>头文件
2.用信号量来进行线程同步
信号量的创建
int sem_init(sem_t * sem, int pshared, unsigned int value);
sem:指向信号量描述符对象的指针
pshared:控制信号量的类型,0表示该信号量是当前进程的局部信号量,否则,这个信号量可以在多个进程中使用
value:信号量的初始值
信号量的控制
int sem_wait(sem_t *sem);
int sem_post(sem_t *sem);
sem_post作用是以原子操作的方式给信号量加1
sem_wait以原子操作的方式给信号量减1,但他会等到信号量非0的时候才会减,如果信号量值为零时,调用该方法,会等待。
信号量的销毁
int sem_destroy(sem_t * sem);
若清理的信号量正在被一些线程使用,就会收到一个错误。