再见西城 发表于 2015-1-18 11:28:01

Linux编程之Linux多线程函数剖析仓酷云

讨论什么版本好并无意义,关键是你是不是真心想学.不过,为了避免曲高和寡,最好选用的人多的版本。
Linux多线程函数剖析
Linux多线程函数用得对照多的是上面的3个
pthread_create(),pthread_exit(),pthread_join();它们都是在头文件当中。编译时必要加静态库-lpthread
上面是函数的申明:
  pthread_create是UNIX情况创立线程函数
intpthread_create(
pthread_t*restricttidp,
constpthread_attr_t*restrict_attr,
void*(*start_rtn)(void*),
void*restrictarg);
前往值
  若乐成则前往0,不然前往堕落编号
  前往乐成时,由tidp指向的内存单位被设置为新创立线程的线程ID。attr参数用于制订各类分歧的线程属性。新创立的线程从start_rtn函数的地点入手下手运转,该函数只要一个全能指针参数arg,假如必要向start_rtn函数传送的参数不止一个,那末必要把这些参数放到一个布局中,然后把这个布局的地点作为arg的参数传进。
  linux下用C开辟多线程程序,Linux体系下的多线程遵守POSIX线程接口,称为pthread。
  由restrict润色的指针是最后独一对指针所指向的对象举行存取的办法,仅当第二个指针基于第一个时,才干对对象举行存取。对对象的存取都限制于基于由restrict润色的指针表达式中。由restrict润色的指针次要用于函数形参,或指向由malloc()分派的内存空间。restrict数据范例不改动程序的语义。编译器能经由过程作出restrict润色的指针是存取对象的独一办法的假定,更好地优化某些范例的例程。
参数
  第一个参数为指向线程标识符的指针。
  第二个参数用来设置线程属性。
  第三个参数是线程运转函数的肇端地点。
  最初一个参数是运转函数的参数。
别的,在编译时注重加上-lpthread参数,以挪用静态链接库。由于pthread并不是Linux体系的默许库
pthread_exit(void*retval);
线程经由过程挪用pthread_exit函数停止本身实行,就好像历程在停止时挪用exit函数一样。这个函数的感化是,停止挪用它的线程并前往一个指向某个对象的指针。该指针能够经由过程pthread_join(pthread_ttpid,void**value_ptr)中的第二个参数value_ptr猎取到。
函数pthread_join用来守候一个线程的停止。函数原型为:
  externintpthread_join__P(pthread_t__th,void**__thread_return);
第一个参数为被守候的线程标识符,第二个参数为一个用户界说的指针,它能够用来存储被守候线程加入时的前往值。这个函数是一个线程堵塞的函数,挪用它的函数将一向守候到被守候的线程停止为止,当函数前往时,被守候线程的资本被发出。假如实行乐成,将前往0,假如失利则前往一个毛病号。
一切线程都有一个线程号,也就是ThreadID。其范例为pthread_t。经由过程挪用pthread_self()函数能够取得本身的线程号。
上面是一个复杂的例子,子线程thread_fun会打出5次“thisisthread_funprint!”然后挪用pthread_exit加入,并前往一个指向字符串“thisisthreadreturnvalue!”的指针。在主函数内里挪用pthread_join守候thread_fun线程停止,然后读取子线程的前往值到value中,再打印出来。
输入了局是:
pthread_createok!
thisisthread_funprint!
thisisthread_funprint!
thisisthread_funprint!
thisisthread_funprint!
thisisthread_funprint!
pthreadexitvalue:thisisthreadreturnvalue!
01.#include
02.#include
03.#include
04.#include
05.#include
06.#include
07.//////////////////////////////////////////////////////
08.void*thread_fun(void*arg){
09.inti=0;
10.char*value_ptr="thisisthreadreturnvalue!n";
11.for(i=0;i<5;i++){
12.printf("thisisthread_funprint!n");
13.sleep(1);
14.}
15.pthread_exit((void*)value_ptr);
16.}
17.//////////////////////////////////////////////////////
18.intmain(intargc,char**argv){
19.pthread_tpid;
20.intret;
21.void*value;
22.
23.ret=pthread_create(&pid,NULL,thread_fun,NULL);
24.if(ret){
25.printf("pthread_createfailed!nerrno:%dn",errno);
26.return-1;
27.}
28.printf("pthread_createok!n");
29.
30.pthread_join(pid,&value);
31.printf("pthreadexitvalue:%sn",value);
32.return0;
33.}
34.
35.

学习python,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。

谁可相欹 发表于 2015-1-21 07:29:10

学习Linux半年了~个人认为不会的多在网上找资料网上有很多资料可以搜索到,LS那位说放手去搞。

小女巫 发表于 2015-1-27 05:13:45

首先Linux是开源的,这也是最主要的原因,想学windows,Unix,对不起我们没源代码。也正是因为这样,Linux才能够像滚雪球一样越滚越大,发展到现在这种规模。

柔情似水 发表于 2015-2-4 21:48:20

Linux简单,占内存少,特别是对于程序开发人员来说很方便,如果说windows的成功在于其方便用户的窗口管理界面。

第二个灵魂 发表于 2015-2-10 17:34:06

随着Linux技术的更加成熟、完善,其应用领域和市场份额继续快速增大。目前,其主要应用领域是服务器系统和嵌入式系统。然而,它的足迹已遍布各个行业,几乎无处不在。

若相依 发表于 2015-3-1 13:14:35

尽量不要提问纯属是扯蛋.学习Linux特别是自己一个人初学入手的时候没人教很困难.当然如果可以的话平时多去买些Linux书...对学习Linux很有帮助.

小魔女 发表于 2015-3-1 20:53:24

然我们对Linux的学习首先是通过对它的产生,发展,到今天仍然在不断完善开始的。

分手快乐 发表于 2015-3-2 03:36:51

这种补充有助于他人在邮件列表/新闻组/论坛中搜索对你有过帮助的完整解决方案,这可能对他们也很有用。

冷月葬花魂 发表于 2015-3-3 18:57:25

在学习的过程中,我们用的是VM虚拟机,开始时真的不真的该怎么去做,特别是我的是命令窗口界面,别人的是图形界面,我都不知道怎么调过来。

只想知道 发表于 2015-3-13 06:11:27

你需要提供精确有效的信息。Linux这并不是要求你简单的把成吨的出错代码或者数据完全转储摘录到你的提问中。

再现理想 发表于 2015-3-20 14:56:58

最好先搜寻一下论坛是否有您需要的文章。这样可以获得事半功倍的效果。

变相怪杰 发表于 2015-4-15 14:17:42

用户下达的命令解释给系统去执行,并将系统传回的信息再次解释给用户,估shell也称为命令解释器,有关命令的学习可参考论坛相关文章,精通英文也是学习Linux的关键。
页: [1]
查看完整版本: Linux编程之Linux多线程函数剖析仓酷云