📅  最后修改于: 2023-12-03 15:20:37.574000             🧑  作者: Mango
线程(Thread)是进程中的一个实体,是被操作系统独立调度和分派 CPU 的基本单位,它是比进程更小的能独立运行的基本单位。每个线程有自己独立的栈(或称为运行时堆栈),并共享进程的全局变量、静态变量等数据。线程没有自己的内存空间和文件描述符,线程间通信可以直接读写同一进程中的数据或共享同一文件等。
Linux系统提供pthread库来支持线程操作,Linux中使用的线程库是 POSIX Threads,简称 Pthreads。使用 Pthreads 编写的程序可移植性较高,可运行在 POSIX Threads 支持的各种系统上。
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
int pthread_join(pthread_t thread, void **retval);
void pthread_exit(void *retval);
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
int pthread_mutex_lock(pthread_mutex_t *mutex);
int pthread_mutex_unlock(pthread_mutex_t *mutex);
以下是一个创建线程、等待线程执行完成并打印线程函数返回值的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *thread_func(void *arg) {
printf("子线程ID为:%lu\n",(unsigned long)pthread_self());
int i,sum=0;
for(i=1;i<=100;i++) {
sum += i;
}
pthread_exit((void*)sum);
}
int main() {
pthread_t tid;
int ret;
int *res;
ret=pthread_create(&tid,NULL,thread_func,NULL);
if(ret != 0) {
printf("创建线程失败!\n");
exit(1);
}
printf("父线程ID为:%lu\n",(unsigned long)pthread_self());
ret=pthread_join(tid,(void**)&res);
if(ret != 0) {
printf("等待线程失败!\n");
exit(1);
}
printf("子线程返回值为:%d\n",*res);
return 0;
}