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

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

成都创新互联-专业网站定制、快速模板网站建设、高性价比瑞安网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式瑞安网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖瑞安地区。费用合理售后完善,十载实体公司更值得信赖。

使用 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两种方式,只要读者在使用时分清楚两种函数功能,就可以成功编写出需要的多线程程序。

创新互联服务器托管拥有成都T3+级标准机房资源,具备完善的安防设施、三线及BGP网络接入带宽达10T,机柜接入千兆交换机,能够有效保证服务器托管业务安全、可靠、稳定、高效运行;创新互联专注于成都服务器托管租用十余年,得到成都等地区行业客户的一致认可。

文章标题:Linux环境下如何建立线程(linux建立线程)
本文路径:http://www.mswzjz.com/qtweb/news38/195438.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联