Linux多线程基础(1):创建线程

发布时间:2024年01月06日

在大家的关注与陪伴下,前些日子我们已将网络通信基础专栏更新完毕,包括网络编程基础中所有函数的工作原理以及使用方法,感兴趣的同学欢迎查看.从今天开始,我们一起正式进入linux系统下多线程多进程的学习.

0.为什么要使用线程

想象一下,如果你需要构建一个火车站售票系统,在面对巨大的人流量时,能够高效、快速地处理所有的购票请求。我们可能的思路是构建一个售票函数,并在主函数调用他.这相当于仅仅创建了一个售票窗口,无法满足高效、快速的性能.如果可以设置多个售票窗口同时运行,这效率不久可以嘎嘎提高了吗.这就是线程的作用,每个线程相当于一个售票系统.

1.线程的定义

线程是程序中负责执行的实体,或者说是进程的子任务。线程是操作系统能够进行运算调度的最小单位,被包含在进程之中,是进程中的实际运作单位。一个进程至少要有一个线程,即主线程,也可以有多个线程,即创建子线程。线程可以看作是轻量级的进程,除了栈之外,没有自己独立的内核资源。

要使用线程,需要包含头文件:

#include<pthread.h>

线程的函数定义:
?

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,  
                  void *(*start_routine) (void *), void *arg);

其中:

thread:线程标识符指针;

attr:线程属性指针,如堆栈大小、是否分离等,通常设为NULL,表示默认属性;

start_routine:线程运行函数的起始地址, 注意函数的类型:void *(*start_routine) (void *)

arg:传递给线程函数的参数,可传入NULL(ps:这个参数是void类型的,一般需要使用void *将参数强制转换)

2.举例

// 引入所需的头文件,这些文件提供了多线程编程所需的各种功能和数据类型  
#include <pthread.h>    
#include <string.h>  
#include <stdio.h> 
#include <unistd.h>   
#include <stdlib.h>  
#include <iostream>  
// 定义第一个线程的执行函数  
void *pth1(void* str) {  
    std::cout << "第一个线程" << std::endl;    
    pthread_exit(0);  // 退出当前线程,并返回一个值(在这种情况下为0)  
}  
// 定义第二个线程的执行函数  
void *pth2(void* str) {  
    std::cout << "第二个线程" << std::endl;   
    pthread_exit(0);   // 退出当前线程,并返回一个值(在这种情况下为0)  
}  
// 主函数  
int main(void) {  
    // 定义两个线程的标识符  
    pthread_t thread1, thread2;  
      
    // 创建第一个线程,并执行 pth1 函数  
    pthread_create(&thread1, NULL, pth1, NULL);  
    // 创建第二个线程,并执行 pth2 函数  
    pthread_create(&thread2, NULL, pth2, NULL);  
      
    // 等待第一个线程结束(如果它还在运行的话)  
    pthread_join(thread1, NULL);  
    // 当第一个线程退出后,输出“第一个线程退出”  
    std::cout << "第一个线程退出" << std::endl;  
      
    // 等待第二个线程结束(如果它还在运行的话)  
    pthread_join(thread2, NULL);  
    // 当第二个线程退出后,输出“第二个线程退出”  
    std::cout << "第二个线程退出" << std::endl;  
    std::cout << "主函数退出" << std::endl;  
}

这个例子中有很多还没有讲到的函数,大家不用慌,后续都会讲到,这篇文章仅需要你知道如何创建线程即可.

文章来源:https://blog.csdn.net/shnhe/article/details/135386135
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。