📜  thread in - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:20:37.574000             🧑  作者: Mango

在C语言中使用线程

什么是线程?

线程(Thread)是进程中的一个实体,是被操作系统独立调度和分派 CPU 的基本单位,它是比进程更小的能独立运行的基本单位。每个线程有自己独立的栈(或称为运行时堆栈),并共享进程的全局变量、静态变量等数据。线程没有自己的内存空间和文件描述符,线程间通信可以直接读写同一进程中的数据或共享同一文件等。

如何在C语言中使用线程?

Linux系统提供pthread库来支持线程操作,Linux中使用的线程库是 POSIX Threads,简称 Pthreads。使用 Pthreads 编写的程序可移植性较高,可运行在 POSIX Threads 支持的各种系统上。

#include <pthread.h>
pthread库常用函数
  • pthread_create() 创建线程
  • pthread_join() 等待线程执行完成
  • pthread_exit() 线程退出
  • pthread_mutex_init() 初始化互斥锁
  • pthread_mutex_lock() 加锁
  • pthread_mutex_unlock() 解锁
pthread_create()函数
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);
  • thread:新创建线程的标识符
  • attr:新线程的属性
  • start_routine:线程运行函数的起始地址
  • arg:运行函数的参数
pthread_join()函数
int pthread_join(pthread_t thread, void **retval);
  • thread:等待线程ID
  • retval:线程函数返回值
pthread_exit()函数
void pthread_exit(void *retval);
  • retval: 线程函数的返回值
pthread_mutex_init()函数
int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr);
  • mutex:互斥锁对象
  • attr:互斥锁的属性
pthread_mutex_lock()函数
int pthread_mutex_lock(pthread_mutex_t *mutex);
  • mutex:互斥锁对象
pthread_mutex_unlock()函数
int pthread_mutex_unlock(pthread_mutex_t *mutex);
  • 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;
}