Linux编程培训哪家好_linux编程培训哪家好

2020-02-27 其他范文 下载本文

Linux编程培训哪家好由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“linux编程培训哪家好”。

中国IT职业教育领先品牌

精品课程 全程面授

Linux编程培训哪家好

想知道Linux编程培训哪家好?先来了解一下什么是Linux编程吧!Linux下的网络编程指的是socket套接字编程,入门比较简单。在学校里学过一些皮毛,平时就是自学玩,没有见识过真正的socket编程大程序,比较遗憾。总感觉每次看的时候都有收获,但是每次看完了之后,过段时间不看,重新拾起这些知识的时候又要从头开始,所以,在这里做个笔记也算是做个模板,以后可以直接从某一个阶段开始接着玩……

Linux线程介绍

通过socket机制建立起的连接,仅仅实现的是服务器端和客户端之间的通信,数据的传输。但是要使网络编程实现性能更优的话,少不了使用线程,线程间通信以及IO函数,接下来就简单讲一下线程,线程间通信,以及IO函数中的select函数。

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

Linux下的线程,线程是进程中的一个运行单元,进程fork子进程的过程是对父进程进程copy的过程,然后紧紧改变子进程本身的一些变量,之后各自的进程运行属于自己进程空间的内容;而线程的创建则不然,线程创建在进程中有自己固定的创建函数,在同一个进程中创建的所有线程会共用所在进程的全局变量,信号句柄,文件描述符和当前的目录状态,但是每个线程又会有属于自己的线程栈等私有的属性。进程获得的使用资源被分给了每个线程,除公共部分外每个线程之间的运行又是相对独立的。Linux下线程的基本函数: 1 线程创建函数pthread_create

intpthread_create(pthread_t *thread, pthread_attr_t *attr, void *(*start_routine)(void *), void *arg);功能介绍:

该函数是用于在进程中创建线程,线程在进程中创建有固定的形式。个人理解,线程的创建就是圈起了一段代码作为一个线程,这段被圈起来的函数作为线程函数,线程开始运行就是从线程函数开始运行,线程函数也有固定的格式,因为格式固定,线程的创建把单独作为参数的线程函数和线程函数参数整合到一起,形成一个线程。当然在创建的同时,会设置当前线程的属性,以及用于操作的线程标识符。参数说明:

thread:第一个参数是一个pthread_t类型的线程标识符,可以通过操作该标识符,实现对线程的操作;

attr:第二个参数是用来设置线程的属性,包括线程优先级等属性;

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

start_routine:第三个参数是指当线程成功创建后,开始运行的一个单元,该单元需要自己编写,一般会使用无限循环来实现;

arg:第四个参数是第三个参数线程函数运行时传入的参数,为了防止每个线程函数输入参数不同而难以操作,所以线程创建讲两者分开,这样更灵活,便于操作。线程结束函数pthread_join和pthread_exit 2.1 线程函数结束pthread_exit

void pthread_exit(void *retval);功能介绍:

该函数主要的功能是从被圈起来的线程函数中退出,退出过程中会通过函数的参数指针带出一个对象,当等待线程结束函数pthread_join的第二个参数不是NULL时,会传给这个参数做相应的处理。参数说明:

函数的参数是一个指针,通过该指针可以传递出当前进程结束时的相关信息,这个值会被pthread_join捕捉到。2.2 等待线程结束pthread_join

int pthread_join(pthread_t th,void **return_value);功能介绍:

函数主要功能是等待线程结束,pthread_exit是主动结束线程,该函数是被动等待线程结束。函数会处于等待状态,如果函数的第二个参数没有设置为NULL,则会捕捉到从exit传递回的信息。参数说明:

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

第一个参数是要等待的线程的标识符,有phread_create函数第一个参数指定其值是多少;第二个参数是一个二维指针,用于等待从pthread_exit返回值。当然,如果不适用pthread_exit结束线程函数的话,线程函数结束,也就是调用函数的线程结束。当线程函数运行结束时,该函数用于回收线程的资源。

对于讲理论来说,大家往往更喜欢实例,下面是一个线程的小例子。

#include 2 #include 3 #include

pthread_tpth[2];6

void *print_meage(void *argv)8 { 9

printf(“This is in thread %x!n”, *((pthread_t *)argv));10

if(&pth[0] == argv)12

{ 13

sleep(1);14

pthread_exit(“1 thread exit!”);15

} 16

else

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

{ 18

sleep(10);19

pthread_exit(“2 thread exit!”);20

} 21 } 22 intmain(void)24 { 25

void *returnValue;26

printf(“This is in main function BEFORE pthread create!n”);28

pthread_create(&pth[0], NULL, &print_meage, &pth[0]);29

pthread_create(&pth[1], NULL, &print_meage, &pth[1]);30

printf(“This is in main function AFTER pthread create %x!n”, pth[0]);31

pthread_join(pth[0], &returnValue);32

printf(“This is in main function AFTER pthread join 1n”);33

pthread_join(pth[1], &returnValue);34

printf(“This is in main function returnValue=%sn”, returnValue);35

printf(“This is in main function AFTER pthread joinn”);36

return 0;37 }

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

下面是运行结果:

这个只是运行结果,其实一些动态的东西,也看不到,因为pthread_join是阻塞等待线程结束的,所以说这个代码是线程1等待一秒首先结束线程运行,pthread_join会捕捉到线程结束,线程2会在线程1结束运行后约9s然后结束运行,这时候线程2的pthread_join才会捕捉到线程结束并释放资源。所以如果是使用多线程并且在同一个地方统一使用pthread_join释放资源时,最好先释放首先结束运行的线程,然后在释放后结束的线程。否则的话如果使用pthread_join先释放后结束运行的线程,先结束运行的线程资源因为等待前面pthread_join结束而得不到释放。

因为线程是在进程中创建的,线程公用进程中的资源,所以线程资源的释放非常重要。主要的线程资源释放的方法有下面三种:

1)在线程函数中调用pthread_detach(pthread_self()),主动释放线程资源; 2)向上面介绍的pthread_join函数,被动释放线程资源;

3)通过设置线程属性中的__detachstate属性,在线程函数运行完,或者pthread_exit退出时,自动释放线程资源,设置线程属性通过下面方式,pthread_attr_tatt;//线程属性

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

pthread_attr_init(&att);//初始化线程属性

pthread_attr_setdetachstate(&att, PTHREAD_CREATE_DETACHED);//设置线程属性

pthread_create(pthread_t *pthread, &att, void *(*thread_function)(void *),(void *argv));//建立线程 3 线程的属性

线程创建函数pthread_create的第二个参数是指线程的属性,当该参数设置为NULL时,表示使用了线程的默认属性。其实我们可以通过设置第二个参数来设置线程的属性。线程属性的改变有属于自己的结构体和函数。线程属性的结构体

typedefstruct __pthread_attr_s { int

__detachstate;

/*线程的终止状态*/ int

__schedpolicy;

/*调度优先级*/ int

__sched_param

__shedparam;

/*参数*/ int

__inheritsched;

/*继承*/ int

__scope;

/*范围*/ int

__guardsize;

/*保证尺

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

寸*/ int

__stackaddr_set

/*运行栈*/

void

*__stackaddr;

/*线程运行栈地址*/ size_t

__stacksize;

/*线程运行栈大小*/ }pthread_attr_t;

线程主要的属性对象包括上面提到的这几种,线程的属性不可以直接设置,需要通过特定的函数来实现,可以通过函数对上面这几种线程属性进行修改。并且线程属性的修改要在创建线程之前完成。线程属性的初始化函数为pthread_attr_init,通过如下所示的函数可以说明线程的属性参数都可以做修改,需要再次强调的是这些参数的修改需要在创建线程之前完成,将修改后的属性参数通过pthead_create的第二个参数传入到线程中,具体函数如下:(具体如何使用可参考http://blog.csdn.net/hudashi/article/details/7709413)1).线程优先级设置属性,需要先获得线程当前属性优先级,然后通过设置操作修改属性优先级

intpthread_attr_getschedparam(pthread_attr_t* attr, structsched_param* param);intpthread_attr_setschedparam(pthread_attr_t* attr, structsched_param* param);

千锋教育www.daodoc.com

中国IT职业教育领先品牌

精品课程 全程面授

2).设置线程范围属性

intpthread_attr_setscope(pthread_attr_t* attr, int scope);3).设置线程终止状态属性

intpthread_attr_setdetachstate(pthread_attr_t* attr, intdetachstate);4).设置线程保护区大小属性

intpthread_attr_setguardsize(pthread_attr_t* attr,size_tguardsize);5).设置线程继承调度属性

intpthread_attr_setinheritsched(pthread_attr_t* attr, intinheritsched);6).设置线程栈基址以及堆栈的最小尺寸大小 intpthread_attr_setstack(pthread_attr_t* stackader,size_tstacksize);7).设置线程栈基址属性

intpthread_attr_setstackaddr(pthread_attr_t* attr, void* stackader);8).设置线程栈的大小属性

intpthread_attr_setstacksize(pthread_attr_t* attr, size_tstacksize);

以上就是千锋Linux学院的学习笔记。另附心得体会一篇:

从零基础开始学Linux或者是转行学习Linux,参加培训会保证你在单位时间内学到更多,毕竟随着Linux行业的快速发展,未来必将会面临更多的竞争,所以只有不遗余力的把自己打造成一把利剑,从专业度到职业素质,只有比别人更突出和优秀,才能够在这个相互选择的世界当中拥有更多的选择权利。现在想

千锋教育www.daodoc.com

attr, void*

中国IT职业教育领先品牌

精品课程 全程面授

要学习Linux技术,只有通过参加培训才可以保证快速掌握所学知识和技能,所以培训是比较靠谱的。

Linux编程培训哪家好?千锋教育的Linux课程专注于当前热门的Linux相关技术,就Linux而言,内容全面而细致的。Linux教学团队由众多名师打造,拥有多年教学经验和高超的Linux授课技巧和实战视野,让你理论和实战兼得。

千锋教育www.daodoc.com

《Linux编程培训哪家好.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
Linux编程培训哪家好
点击下载文档
相关专题 linux编程培训哪家好 培训 哪家 Linux linux编程培训哪家好 培训 哪家 Linux
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文