Linux环境下如何建立线程(linux建立线程)

在Linux系统中建立线程实际上非常简单,主要有两种方法:两个函数 pthread_create 和 clone。

使用 pthread_create 方法建立线程

使用 pthread_create 是最常见的创建线程的方法,主要是因为它的语法简单只需几行代码。它的原型如下:

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

它的参数介绍如下:

1、thread 创建成功后,返回线程 ID。

2、attr 指定线程属性,通常设置为 NULL。

3、 start_routine 为线程启动时运行的函数或程序段。

4、arg 传递给 start_routine 的参数。

例子:

#include

#include

void *print_message_function( void *ptr );

main()

{

pthread_t thread1, thread2;

const char *message1 = “Thread 1”;

const char *message2 = “Thread 2”;

int iret1, iret2;

iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);

iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);

pthread_join( thread1, NULL);

pthread_join( thread2, NULL);

printf(“Thread 1 returns: %d\n”, iret1);

printf(“Thread 2 returns: %d\n”, iret2);

exit(0);

}

void *print_message_function( void *ptr )

{

char *message;

message = (char *) ptr;

printf(“%s \n”, message);

}

使用 clone 方法建立线程

clone是Linux内核规定新线程拥有和父进程完全相同的地址空间时,可以使用它来创建线程。它的原型如下:

int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, int *parent_tid, struct user_desc *tls, int *child_tid);

它的参数介绍如下:

1、fn 创建线程时执行的函数指针。

2、child_stack 子线程使用的堆栈指针。

3、flags 指定进程地址空间的复制方式。

4、arg 参数传递给 fn。

5、parent_tid 指向父线程 ID 的指针。

6、tls 指定注册的 TLS 段。

7、child_tid 返回子线程 ID 的指针。

例子:

#include

#include

#include

#define STACK_SIZE 1024 * 64

char child_stack[STACK_SIZE];

int thread_function(void *param)

{

printf(“I’m new thread!\n”);

return 0;

}

int main()

{

clone(thread_function, child_stack + STACK_SIZE,

CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_THREAD | CLONE_SYSVSEM,

NULL);

printf(“Main thread finished!\n”);

return 0;

}

总而言之,在Linux环境下建立线程使用pthread_create和clone两种方式,只要读者在使用时分清楚两种函数功能,就可以成功编写出需要的多线程程序。


数据运维技术 » Linux环境下如何建立线程(linux建立线程)