详解Linux多线程编程(不限Linux)

详解Linux多线程编程

Linux是一种非常流行的操作系统,因其良好的多线程支持而在并发编程场景中应用广泛。本篇文章将详细讲解如何在Linux环境下进行多线程编程。

基础知识

在Linux环境下,线程使用pthread库进行创建和控制。该库包含以下头文件:

#include <pthread.h>

线程的创建方法如下:

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

其中,第一个参数指向pthread_t类型的指针,表示新创建的线程的唯一标识符。第二个参数可以指定线程的属性,如果使用默认属性可以传入NULL。第三个参数指向一个函数指针,表示新线程启动时要执行的函数。最后一个参数是传递给函数的参数。

线程的销毁方法如下:

int pthread_cancel(pthread_t thread);

其中,参数指定要终止的线程的标识符。

示例1:创建和销毁线程

下面是一个简单的多线程示例,该示例创建了一个新线程,并在新线程中循环输出“Hello, World!”,主线程则循环输出“Main Thread”。

#include <pthread.h>
#include <stdio.h>

void* thread_func(void* arg) {
    for (int i = 0; i < 5; i++) {
        printf("Hello, World!\n");
    }
    return NULL;
}

int main() {
    pthread_t tid;
    if (pthread_create(&tid, NULL, thread_func, NULL) != 0) {
        printf("Failed to create thread!\n");
        return -1;
    }
    for (int i = 0; i < 5; i++) {
        printf("Main Thread\n");
    }
    if (pthread_cancel(tid) != 0) {
        printf("Failed to cancel thread!\n");
        return -1;
    }
    return 0;
}

该示例中,新线程中的函数使用了一个for循环来输出“Hello, World!”,主线程则也使用了一个for循环来输出“Main Thread”。最后,主线程调用pthread_cancel函数终止新线程的执行。

示例2:线程间的同步

多线程编程中存在线程间竞争的问题,需要使用同步机制来避免。Linux环境中提供了多种同步机制,本例以互斥锁为例说明。

互斥锁用于保护多个线程对共享资源的访问,它必须被锁定和解锁操作包围。下面是一个使用互斥锁的示例。

#include <pthread.h>
#include <stdio.h>

pthread_mutex_t count_mutex;
int count = 0;

void* thread_func(void* arg) {
    for (int i = 0; i < 5; i++) {
        pthread_mutex_lock(&count_mutex);
        count++;
        printf("Thread %d, count = %d\n", *(int*)arg, count);
        pthread_mutex_unlock(&count_mutex);
    }
    return NULL;
}

int main() {
    pthread_mutex_init(&count_mutex, NULL);
    pthread_t tid1, tid2;
    int arg1 = 1, arg2 = 2;
    if (pthread_create(&tid1, NULL, thread_func, &arg1) != 0) {
        printf("Failed to create thread 1!\n");
        return -1;
    }
    if (pthread_create(&tid2, NULL, thread_func, &arg2) != 0) {
        printf("Failed to create thread 2!\n");
        return -1;
    }
    if (pthread_join(tid1, NULL) != 0) {
        printf("Failed to join thread 1!\n");
        return -1;
    }
    if (pthread_join(tid2, NULL) != 0) {
        printf("Failed to join thread 2!\n");
        return -1;
    }
    pthread_mutex_destroy(&count_mutex);
    return 0;
}

该示例中,两个线程分别对count变量进行累加,使用互斥锁保护了共享资源的访问。主线程使用pthread_join函数等待两个线程的执行结束,最后销毁了互斥锁。

总结

本篇文章介绍了Linux环境下多线程编程的基础知识和示例,内容包括线程的创建和销毁、线程间的同步机制等。希望可以帮助读者顺利进行多线程编程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Linux多线程编程(不限Linux) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • python常用模块之requests

    Python常用模块之requests requests是Python中一个常用的HTTP库,它可以方便地发送HTTP请求和处理HTTP响应。本文将提供一个完整的攻略,介绍如何使用requests模块,并提供两个示例说明。 安装requests 可以使用以下命令安装requests模块: pip install requests 发送HTTP请求 可以使用r…

    other 2023年5月8日
    00
  • VBS递归创建多级目录文件夹的方法

    VBS递归创建多级目录文件夹的方法 背景及介绍 在VBS脚本编写中,经常会有创建多级目录文件夹的需求,此时可以使用递归的方法来实现。递归是指函数或过程在运行中通过调用自身的方式来实现对问题求解的。下面将介绍VBS中递归创建多级目录文件夹的实现方法。 实现步骤 VBS中递归创建多级目录文件夹的具体步骤如下: 定义函数 CreateFolder ,参数为文件夹完…

    other 2023年6月27日
    00
  • win10预览版9924下载地址 win10 9924官方下载

    Win10预览版9924下载攻略 Win10预览版9924是微软最新发布的操作系统版本,本攻略将详细介绍如何下载和安装该版本。以下是完整的攻略过程: 步骤一:访问微软官方网站 首先,打开你的浏览器,访问微软官方网站。你可以在地址栏输入https://www.microsoft.com来进入微软官方网站。 步骤二:导航到Windows 10预览版页面 在微软官…

    other 2023年8月3日
    00
  • IP地址的数字代表的含义是什么?

    IP地址的数字代表的含义是什么? IP地址是用于在互联网上唯一标识设备的一组数字。它由32位(IPv4)或128位(IPv6)的二进制数字组成,为了方便表示,通常以点分十进制的形式呈现。IP地址的数字代表以下两个主要含义: 1. 网络标识 IP地址的前几位数字表示网络的标识。在IPv4中,IP地址被分为网络地址和主机地址两部分,其中网络地址用于标识网络,主机…

    other 2023年7月30日
    00
  • PHP利用超级全局变量$_POST来接收表单数据的实例

    PHP利用超级全局变量$_POST来接收表单数据的实例攻略 在PHP中,可以使用超级全局变量$_POST来接收通过表单提交的数据。$_POST是一个关联数组,其中的键值对对应着表单中的输入字段名和用户输入的值。 以下是使用$_POST接收表单数据的完整攻略: 步骤1:创建HTML表单 首先,需要创建一个HTML表单,以便用户输入数据。可以使用<form…

    other 2023年7月29日
    00
  • c#语言assert

    C#语言中的Assert 在C#语言中,Assert是一种用于调试的工具,用于检查程序中的条件是否为真。如果条件为假,Assert会抛一个异常,以便程序员可以及时发现和修复问题。本攻略将详介绍C#语言中的Assert,包括基本概使用方法和示例说明。 基本概念 Assert是C#语言中的一种调试工具,用于检查程序中的条件是否为真。如果条件为假,Assert会抛…

    other 2023年5月6日
    00
  • VNC远程控制软件怎么用?VNC客户端+服务器端安装及配置图文详细教程(附下载)

    详细讲解“VNC远程控制软件怎么用?”如下所述: 1. 简介 VNC(Virtual Network Computing)是一种远程桌面控制技术,它通过网络将一台机器的桌面图像传输到另一台机器上,使得用户可以在另一台机器上对该机器进行完全控制。 2. VNC安装与配置 2.1 VNC服务器端的安装与配置 VNC服务器端常用的有 TightVNC、RealVN…

    other 2023年6月25日
    00
  • Java虚拟机内存分配与回收策略问题精细解读

    Java虚拟机内存分配与回收策略问题精细解读 Java虚拟机(JVM)内存分配与回收策略是Java程序性能优化的重要方面。本攻略将详细讲解Java虚拟机内存分配与回收策略的相关知识,并提供两个示例来说明。 1. 内存分配策略 Java虚拟机的内存分配主要涉及堆内存和栈内存。 1.1 堆内存分配 堆内存是Java程序中对象实例的存储区域。Java虚拟机通过垃圾…

    other 2023年8月1日
    00
合作推广
合作推广
分享本页
返回顶部