欢迎来到本网站,本篇文章将为你详细讲解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技术站