Linux下多线程的创建和控制

1、Pthread_create函数:创建一个新的线程,其功能对应进程中的fork函数,如果成功返回0,不成功返回一个错误的号码

函数原型:pthread_create(pthread_t *thread,pthread_attr_t *attr,void*(*start_routine)(void *),void *arg):

第一个参数,参数类型为pthread_t类型,用于接收创建新的线程的id

第二个参数,参数类型为pthread_attr_t类型,用于设置线程的属性,一般设置为NULL,表示使用线程默认属性sfw。

第三个参数,参数类型为函数指针,用于设置线程的主函数,当pthread_create函数返回时,则会自动调用指定的函数,当指定的函数运行完后,则线程就结束了

第四个参数,设置线程主函数的参数,如果没有这设置为NULL

2、Pthread_join函数:等待执行的线程,并接受子进程返回的状态

函数原型:int pthread_join(pthread_t thread, void ** retval)

1)参数pthread_t thread为主线程需要等待的指定线程

2)参数retval用于接收对应线程结束状态(如果不接收,则设置为NULL)

3、pthread_self函数:获取当前线程的id,其返回值为Pthread_t类型(线程id类型)

   函数原型:pthread_t  pthread_self(void) 获取线程身份的id号

4、Pthread_key_create函数:创建线程私有数据pthread_key_t结构

函数原型:int  pthread_key_create(pthread_key_t *key, void(*destructor)(void*))创建线程私有数据

   第一个参数为需要实例的pthread_key_t变量

第二个参数是销毁函数,此参数是可选的,当为NULL则系统调用默认的销毁函数进行相关数据的销毁,如果不为NULL,则在线程退出的时候,将key关联的数据作为参数,传入到指定的销毁函数并调用,最后释放分配的缓冲区或关闭文件流等的释放操作

   此处的pthread_key_t结构,可以理解为各个线性中,同名但内容不同的变量

5、pthread_key_delete函数:注销线程中的私有数据

函数原型:int  pthread_key_delete(pthread_key_t key) 销毁指定的pthread_key_t变量

6、pthread_setspecific函数 写线程私有数据

7、pthread_getspecific函数 读线程私有数据

函数原型void pthread_getspecific(pthread_key_t key) :读取当前线程获取对应所持有pthread_key_t变量中的内容

   第一个参数为指定需要内容的pthread_key_t变量

   此处需要注意,如果pthread_key_t变量的内容为空,则会返回0(NULL)

例:

1、在main函数中创建两个子线程,两个子线程的函数为child1和child2


2、在两个子线程函数中分别输出两个子线程id,并在child2中定义一个私有变量a=(学号后3位)

(1)输出id

(2)定义私有变量

注意:对应线程库的函数,需要在编译的时候进行链接,也就是需要在原来的gcc编译命令后面加上-lpthread