线程初认识
线程的基本概念
线程实际上是应用层的概念,一个进程内部的多条线程共享了大部分资源,但是还是有一些信息是各自独立的一一比如其运行状态,当一个线程处于睡眠的时候,另一条线程可以正在运行,而或许有些线程已经变成僵尸了!就像一个人是如果是多线程的,他就可以做到一边睡觉一边吃饭一边在洗澡!正是利用线程状态独立的特征,程序才有可能一遍阻塞等待,一遍干别的事情,尽最大可能榨取处理器资源。
进程是承担分配系统资源的基本实体,线程是CPU调度的基本单位
线程特点及API
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:线程的属性变量,创建线程的时候会依赖于这个线程的属性变量去创建出一个线程,这个参数如果需要使用,需要调用pthread_attr_init函数初始化它。如果这个参数为NULL,则代表按照默认属性创建。线程的属性重点包含着如下几点:
- start_routine:一个函数指针类型,新的线程将会去执行这个函数的内容
- arg:这个是传输给start_routine这个函数的参数
pthread_join 线程回收
#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);
函数功能:
- 等待指定的线程退出,并且接收其返回值
pthread_exit 线程退出
#include <pthread.h>
void pthread_exit(void *retval);
函数功能:
- 退出一个线程,如果所有的线程都退出了,我们就会结束进程
注意:
例程:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>
#include <string.h>
void *new_thread(void *arg)
{
char *string = arg;
int i;
for(i=0; i<3; i++)
{
printf("arg=%s\n", string);
sleep(1);
}
pthread_exit("exit");//退出一个线程
return "exit";
}
int main(void)
{
pthread_t tid;
int retval;
void *retpoint;
//创建一条线程
retval = pthread_create( &tid, NULL, new_thread, "hello thread");
if(retval != 0)
{
//perror("创建线程失败:");
fprintf(stderr, "创建线程失败:%s\n", strerror(retval));
return -1;
}
pthread_join(tid, &retpoint);//等待回收指定的线程
printf("接合成功 返回值为%s\n", (char *)retpoint);
return 0;
}
本文深入探讨线程的基本概念,包括线程的特点、API使用,以及如何通过pthread_create、pthread_join和pthread_exit进行线程的创建、回收和退出。通过实例代码,详细解析线程在实际编程中的应用。

被折叠的 条评论
为什么被折叠?



