Linux创建线程
在Linux系统中,可以使用多种方法来创建线程。本文将介绍两种常用的方法:使用pthread库和使用系统调用clone()函数。
1. 使用pthread库创建线程
pthread库是Linux系统中用于线程操作的标准库,使用该库可以方便地创建和管理线程。
要使用pthread库创建线程,首先需要包含pthread.h头文件:
`c
#include
然后,可以使用pthread_create()函数来创建线程:
`c
int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg);
其中,参数thread是一个指向pthread_t类型的指针,用于存储新创建线程的标识符;参数attr是一个指向pthread_attr_t类型的指针,用于设置线程的属性,可以传入NULL使用默认属性;参数start_routine是一个指向函数的指针,该函数将作为新线程的入口点;参数arg是传递给start_routine函数的参数。
下面是一个使用pthread库创建线程的示例:
`c
#include
void *thread_func(void *arg) {
printf("Hello, I am a new thread!\n");
pthread_exit(NULL);
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_func, NULL);
pthread_join(thread, NULL);
printf("Main thread exits.\n");
return 0;
在上面的示例中,我们定义了一个名为thread_func的函数作为新线程的入口点。在主线程中,我们使用pthread_create()函数创建了一个新线程,并使用pthread_join()函数等待新线程结束。主线程打印一条退出信息。
2. 使用系统调用clone()函数创建线程
除了使用pthread库,Linux还提供了系统调用clone()函数来创建线程。clone()函数是一个底层的系统调用,可以用于创建轻量级进程(线程)。
要使用clone()函数创建线程,需要包含和头文件:
`c
#include
#include
然后,可以使用clone()函数来创建线程:
`c
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...);
其中,参数fn是一个指向函数的指针,该函数将作为新线程的入口点;参数child_stack是一个指向新线程栈的指针;参数flags用于设置新线程的标志,可以传入SIGCHLD表示创建一个共享父进程资源的线程;参数arg是传递给fn函数的参数。
下面是一个使用clone()函数创建线程的示例:
`c
#include
#include
#include
#include
int thread_func(void *arg) {
printf("Hello, I am a new thread!\n");
return 0;
int main() {
char *stack = malloc(4096); // 分配新线程栈空间
pid_t pid = clone(thread_func, stack + 4096, SIGCHLD, NULL);
waitpid(pid, NULL, 0);
printf("Main thread exits.\n");
return 0;
在上面的示例中,我们使用malloc()函数分配了一个新线程的栈空间,并使用clone()函数创建了一个新线程。在主线程中,我们使用waitpid()函数等待新线程结束。主线程打印一条退出信息。
总结
本文介绍了在Linux系统中创建线程的两种常用方法:使用pthread库和使用系统调用clone()函数。使用pthread库可以方便地创建和管理线程,而使用clone()函数可以更底层地创建线程。根据实际需求选择合适的方法来创建线程。