C语言中如何进行线程和进程操作?

  • Post category:C

C语言中通过调用系统接口实现了多线程和多进程操作。下面分别介绍如何进行线程和进程操作。

线程操作

线程操作需要使用pthread库。下面是使用pthread_create函数创建线程的示例代码:

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

#define THREAD_NUM 5

void *thread_func(void *arg) {
    int *p_thread_id = (int*)arg;
    printf("Thread %d\n", *p_thread_id);
    pthread_exit(NULL);
}

int main() {
    int i, thread_id[THREAD_NUM];
    pthread_t thread[THREAD_NUM];

    for (i = 0; i < THREAD_NUM; i++) {
        thread_id[i] = i;
        pthread_create(&thread[i], NULL, thread_func, (void*)&thread_id[i]);
    }

    for (i = 0; i < THREAD_NUM; i++) {
        pthread_join(thread[i], NULL);
    }

    return 0;
}

在该示例代码中,pthread_create函数创建了五个线程,pthread_join函数等待线程结束。线程函数thread_func在执行时会打印出线程的ID号。

进程操作

进程操作需要使用fork函数。下面是使用fork函数创建子进程的示例代码:

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

int main() {
    pid_t pid;

    pid = fork();
    if (pid < 0) {  // 创建进程失败
        fprintf(stderr, "fork failed\n");
        exit(EXIT_FAILURE);
    } else if (pid == 0) {  // 子进程
        printf("Child process: pid=%d, ppid=%d\n", getpid(), getppid());
        exit(EXIT_SUCCESS);
    } else {  // 父进程
        printf("Parent process: pid=%d\n", getpid());
        wait(NULL);
        exit(EXIT_SUCCESS);
    }
}

在该示例代码中,fork函数创建了子进程,并在子进程中执行了一段代码,最后退出进程。而在父进程中,通过调用wait函数等待子进程结束。

通过上述两个示例代码,我们可以看出C语言中如何进行线程和进程操作,可以根据实际的需求,进行多线程和多进程的设计。