linux c多线程编程实例代码

欢迎来到本网站,本篇文章将为你详细讲解Linux C多线程编程实例代码的完整攻略。在本攻略中,我们将通过两个示例,演示如何使用Linux C多线程编程实例代码。

什么是Linux C多线程编程

Linux C多线程编程是指在Linux环境下开发多线程应用程序的技术。相比于单线程程序,多线程程序可以更加高效地利用CPU资源,提高程序的响应速度和并发能力。

如何使用Linux C多线程编程实例代码

下面我们将通过两个示例来演示Linux C多线程编程实例代码的使用。

示例一:多线程计算1到1000的和

首先,我们来看一个简单的多线程任务:计算1到1000的和。我们可以将这个任务分割成多个子任务,每个子任务计算一部分数据的和,最后将所有子任务的结果相加,得到最终的结果。

下面是示例代码:

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

#define THREAD_NUM 10
#define DATA_NUM 1000

int data[DATA_NUM];
int step = DATA_NUM / THREAD_NUM;

void *calc_sum(void *args)
{
    int start = *(int *)args;
    int end = start + step;
    int sum = 0;

    for (int i = start; i < end; i++)
        sum += data[i];

    return (void *)sum;
}

int main()
{
    pthread_t threads[THREAD_NUM];
    int thread_args[THREAD_NUM];

    for (int i = 0; i < DATA_NUM; i++)
        data[i] = i + 1;

    for (int i = 0; i < THREAD_NUM; i++)
    {
        thread_args[i] = i * step;
        pthread_create(&threads[i], NULL, calc_sum, (void *)&thread_args[i]);
    }

    int total_sum = 0;

    for (int i = 0; i < THREAD_NUM; i++)
    {
        int sum;
        pthread_join(threads[i], (void **)&sum);
        total_sum += sum;
    }

    printf("Total sum is %d\n", total_sum);

    return 0;
}

在上述代码中,我们定义了10个子线程(THREAD_NUM),每个子线程计算100个数据(step = DATA_NUM / THREAD_NUM)。我们将数据存储在data数组中,然后为每个子线程分配一个任务。每个子线程计算自己的数据之后,将结果返回给主线程,然后主线程将所有结果加起来,得到最终的结果。

示例二:多线程并发处理HTTP请求

下面我们来看一个稍微复杂一些的示例:多线程并发处理HTTP请求。在这个示例中,我们将使用多线程实现一个简单的Web服务器,可以同时处理多个客户端的HTTP请求。

下面是示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <pthread.h>

#define PORT 8000
#define BUFFER_SIZE 1024

void *handle_request(void *args)
{
    int client_fd = *(int *)args;
    char buffer[BUFFER_SIZE];
    memset(buffer, 0, sizeof(buffer));

    if (recv(client_fd, buffer, BUFFER_SIZE - 1, 0) > 0)
    {
        printf("Received message from client: %s\n", buffer);

        char *response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<h1>Hello world!</h1>\r\n";
        send(client_fd, response, strlen(response), 0);
    }

    close(client_fd);
}

int main()
{
    int server_fd, client_fd, sockaddr_in_size;
    struct sockaddr_in server_addr, client_addr;

    server_fd = socket(AF_INET, SOCK_STREAM, 0);

    bzero(&server_addr, sizeof(server_addr));
    server_addr.sin_family = AF_INET;
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
    server_addr.sin_port = htons(PORT);

    bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
    listen(server_fd, 128);

    while (1)
    {
        sockaddr_in_size = sizeof(client_addr);
        client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &sockaddr_in_size);

        pthread_t thread;
        pthread_create(&thread, NULL, handle_request, (void *)&client_fd);
        pthread_detach(thread);
    }

    close(server_fd);

    return 0;
}

在上述代码中,我们创建了一个Socket(套接字),并将其绑定到本机的8000端口上。然后在主循环中,等待客户端的连接请求,如果有新的连接请求,就为其创建一个新的子线程(handle_request),然后将客户端的Socket文件描述符作为参数传递给子线程进行处理。子线程接收客户端的HTTP请求,然后向客户端发送一个简单的HTML页面。

总结

以上就是如何使用Linux C多线程编程实例代码的详细攻略,包括简单的计算任务和并发处理HTTP请求两个示例。希望此文可以对您有所帮助。感谢阅读!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:linux c多线程编程实例代码 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Java基础之并发相关知识总结

    Java基础之并发相关知识总结 什么是并发? 并发是指多个线程在特定的时间段内运行,并且在同一个进程内共享资源。本质上,线程是 CPU 执行计算任务的最小单位,CPU 在多个线程之间切换运行,从而实现并发执行多个任务,提高系统的效率和吞吐量。 什么是线程? 线程是进程内部并发执行的一条路径,也是执行的最小单位。在 Java 中,一个程序至少有一个主线程,主线…

    多线程 2023年5月17日
    00
  • C#使用Parallel类进行多线程编程实例

    下面我将为你详细讲解“C#使用Parallel类进行多线程编程实例”的完整攻略。 概述 多线程编程可以充分利用多核处理器和线程资源,提高应用程序的性能和响应速度。C#中提供了多种实现多线程编程的方法,其中之一是使用Parallel类。Parallel类提供了一组用于并行化任务的静态方法和任务类,可以轻松实现在多个线程中并行执行任务的目的。 Parallel类…

    多线程 2023年5月16日
    00
  • Java Runnable和Thread实现多线程哪个更好你知道吗

    当我们需要在Java中使用多线程时,最常见的做法是实现Runnable接口或继承Thread类。那么如何选择Runnable和Thread之间的实现方式呢?本攻略将详细讲解这个问题。 一、Java多线程基础 Java多线程是利用线程来实现多任务处理的一种编程模式。线程就是独立的执行路径,线程的启动和停止都是由JVM来控制的。 在Java中,实现多线程主要有两…

    多线程 2023年5月17日
    00
  • Java并发编程之Executor接口的使用

    Java并发编程之Executor接口的使用 Java中的线程池在实现多线程编程中有着重要的作用。在Java中,线程池的实现需要通过java.util.concurrent.Executor接口来实现。在本文中,我们将讲解Executor接口的用法,以及如何使用线程池来提高并发效率。 什么是Executor接口? Executor接口是Java线程池的核心接…

    多线程 2023年5月17日
    00
  • 深入解析Java并发程序中线程的同步与线程锁的使用

    深入解析Java并发程序中线程的同步与线程锁的使用 Java是一门多线程语言,因此并发编程是Java编程中的一个重要方面。当多线程并发访问共享资源时,可能会出现线程安全问题,这时就需要用到线程同步和线程锁。本文将深入讲解Java并发程序中线程的同步与线程锁的使用,以及如何解决线程安全问题。 线程同步 线程同步是指多个线程在访问共享资源时,通过某种方式保证同一…

    多线程 2023年5月16日
    00
  • C# 并行和多线程编程——并行集合和PLinq

    C# 并行和多线程编程——并行集合和PLinq 完整攻略 简介 C# 并行编程是一种高效利用多核CPU来加速应用程序运行的方法。通过将工作分配到多个线程或多个进程上,可以实现任务的并行处理。在C#中,常见的并行编程方法是多线程编程和并行集合。其中,多线程编程是指使用标准的线程和锁机制来进行线程之间的同步与通信,而并行集合则是指一组专为并行编程而设计的数据结构…

    多线程 2023年5月17日
    00
  • ThinkPad T470商务本值得买吗?ThinkPad T470全面图解评测及拆解

    ThinkPad T470商务本值得买吗? 如果你正在寻找一款强大的商务笔记本电脑并且预算充足,那么ThinkPad T470绝对是一个不错的选择。它具有出色的性能、超长的电池续航和坚固的外壳,非常适合商务用户。 ThinkPad T470的优点 第七代英特尔酷睿处理器和快速的SSD硬盘,大大提高了工作效率; 机身坚固,通过了12种军事级别的测试,可以适应各…

    多线程 2023年5月17日
    00
  • Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解

    下面是针对“Java多线程之线程通信生产者消费者模式及等待唤醒机制代码详解”的完整攻略。 什么是生产者消费者模式? 生产者消费者模式是指:生产者生产出来的任务放到一个仓库中,消费者从仓库中取出任务来消费。这样就将生产者和消费者融为一体,实现了解耦和。 生产者消费者模式需要解决的问题是:当仓库中的任务被消费完了,如何实现等待生产者生产新任务,同时也不影响已经在…

    多线程 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部