📜  pthread_create - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:18:43.352000             🧑  作者: Mango

pthread_create - C 编程语言

简介

pthread_create 是 C 编程语言中用于创建线程的函数。它允许程序员可以在单个程序中并发地执行多个代码路径。使用 pthread_create,程序员可以创建多个线程并将它们分配给不同的任务。

语法
#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:指向将被线程执行的函数的指针;
  • arg:传递给线程函数的参数。
返回值
  • 成功:返回 0,表示线程创建成功;
  • 失败:返回错误代码,用来识别错误的原因。
示例
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>

void *print_hello(void *thread_id) {
    long tid = (long) thread_id;
    printf("Hello from thread %ld\n", tid);
    pthread_exit(NULL);
}

int main() {
    pthread_t threads[5];
    int i;
    for (i = 0; i < 5; i++) {
        int rc = pthread_create(&threads[i], NULL, print_hello, (void *) i);
        if (rc) {
            printf("Error: unable to create thread, %d\n", rc);
            exit(-1);
        }
    }
    pthread_exit(NULL);
}

以上示例中,我们创建了一个创建 5 个线程的程序,每个线程输出 "Hello from thread [tid]"。使用 pthread_create 函数创建线程,并将线程 ID 存储到数组中。然后,在 print_hello 函数中,线程打印对应的线程 ID。最后,使用 pthread_exit 函数退出主线程。

多线程编程注意事项
  • 线程竞态(Race Condition)问题:由于多个线程共享内存,可能导致数据竞争问题。可以使用互斥锁(mutex)或其他同步机制来解决;
  • 线程生命周期管理:确保线程在合适的时候被创建、运行和销毁,避免资源泄露或线程无法正常退出;
  • 线程间通信:多个线程可能需要相互通信或同步,可以使用信号量、条件变量等机制。
参考资料