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语言中如何进行线程和进程操作,可以根据实际的需求,进行多线程和多进程的设计。