C语言多线程编程-线程创建

2023-12-29 10:01:36

介绍

在C语言中,创建多线程主要有以下两种常见方法:

  1. 使用POSIX Threads(pthread)库:

POSIX Threads是Unix和Linux系统中常用的多线程API。以下是一个使用pthread创建线程的基本示例:

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

// 线程执行的函数
void* thread_function(void* arg) {
    int thread_id = *((int*)arg);
    printf("Hello from thread %d\n", thread_id);
    pthread_exit(NULL); // 线程结束
}

int main() {
    pthread_t thread1, thread2;
    int thread_ids[] = {1, 2};

    // 创建线程
    pthread_create(&thread1, NULL, &thread_function, (void*)&thread_ids[0]);
    pthread_create(&thread2, NULL, &thread_function, (void*)&thread_ids[1]);

    // 等待线程结束
    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    printf("Both threads finished.\n");
    return 0;
}
实例说明

在这个例子中,我们首先包含了pthread.h头文件,然后定义了一个名为thread_function的函数,这个函数将在新创建的线程中执行。在main函数中,我们使用pthread_create函数创建了两个线程,并将thread_function作为线程的入口点,同时传递了线程ID作为参数。pthread_join函数用于等待线程结束。

  1. 在Windows系统中,可以使用 _beginthread_beginthreadex 函数:

以下是一个使用_beginthread创建线程的基本示例:

#include <process.h>
#include <stdio.h>

// 线程执行的函数
unsigned __stdcall thread_function(void* arg) {
    int thread_id = *((int*)arg);
    printf("Hello from thread %d\n", thread_id);
    _endthread(); // 线程结束
    return 0;
}

int main() {
    HANDLE thread1, thread2;
    int thread_ids[] = {1, 2};

    // 创建线程
    thread1 = (HANDLE)_beginthread(&thread_function, 0, (void*)&thread_ids[0]);
    thread2 = (HANDLE)_beginthread(&thread_function, 0, (void*)&thread_ids[1]);

    // 等待线程结束(在Windows中没有直接对应的pthread_join函数,通常会使用 WaitForSingleObject 或其他同步原语)
    WaitForSingleObject(thread1, INFINITE);
    WaitForSingleObject(thread2, INFINITE);

    printf("Both threads finished.\n");
    return 0;
}
实例说明

在这个例子中,使用了_beginthread函数创建线程,并使用WaitForSingleObject函数等待线程结束。注意,Windows中的线程结束函数是_endthread_endthreadex

总结

请注意,这些示例假设你已经在你的系统上安装了相应的线程库(如pthreads for Windows或者直接在Unix/Linux系统中使用pthread)。并且,实际编程时还需要处理错误检查和其他细节。

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