线程(thread),系统编程中很为重要的一种编程方法。
1.概念
主流的操作系统中都是支持多进程,而每个进程中又可以启动多个线程来完成任务,以实现代码并行的操作。
线程是系统调度资源的最小单位,属于轻量级的代码并行,不需要消耗额外的内存空间,一个进程内的线程共享所在进程的内存空间。
线程的资源消耗也远远小于进程,线程之间相互独立,也相互影响,可以提高代码执行的效率。
2.线程函数于进程函数之间的比较
进程: 线程:
创建:fork()/vfork() pthread_create()
退出:exit()/_exit()/_Exit() pthread_exit();
回收:wait()/waitpid() pthread_join();
结束:kill()/sigqueue() pthread_cancel();
由于linux系统中没有支持线程的系统调用,所以在linux中需要借助到第三方库pthread库,并且在编译时得链接pthread库。(-pthread)
3.线程使用步骤
(1)创建线程(pthread_create)
#include<pthread.h>
int pthread_create(pthread_t *thread,const pthread_attr_t *attr,
void *(*start_routine)(void *),void *arg);
//参数:
thread:传出参数,传出创建线程的id
attr:线程属性,一般用NULL表示默认属性
start_routine:线程函数,启动线程后回去执行该函数(属于并行方式)
arg:传递给线程函数的参数
(2)获取线程id(pthread_self)
#include<pthread.h>
pthread_t pthread_self(void);
//返回线程id
(3)线程结束(pthread_exit)
#include<pthread.h>
void pthread_exit(void *retval);
//除了在线程函数中用return结束也可以用该函数来结束
//参数为线程的返回值
参考代码:
#include<stdio.h>
#include<pthread.h>
#include<unistd.h>
//线程函数
void *task(void *arg)
{
printf("task thread id=%lu\n",pthread_self());
for(int i=0;i<30;i++)
{
printf("i=%d\n",i);
sleep(1);
}
pthread_exit(NULL);//退出线程
};
int main()
{
//1.创建id
pthread_t id;
//2.创建线程
pthread_create(&id,NULL,task,NULL);
printf("线程创建成功,id=%lu\n",id);
for(int i=50;i>30;i--){
printf("main:i=%d\n",i);
sleep(1);
}
return 0;
}
//main函数中属于主线程,当main函数退出时,其它线程即使没完成也会被退出
(4)等待线程结束,回收资源(pthread——join)
#include<pthread.h>
int pthread_join(pthread_t thread,void **retval);
//参数:
thread:要等待的线程id
retval:传出参数,传出线程的返回值
当然这些属于是线程较为常用,也最为熟悉简单的函数,它还有其他很多函数。对于我目前的学习情况用上以上函数便已足够,如需更加深入学习,到时再进行学习。
标签:函数,thread,void,编程,系统,线程,pthread,include From: https://blog.csdn.net/2303_76896902/article/details/143341987