|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
讨论什么版本好并无意义,关键是你是不是真心想学.不过,为了避免曲高和寡,最好选用的人多的版本。
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,无论你是打算拿他当主要开发语言,还是当辅助开发语言,你都应该学习他,因为有些时间我们耗不起。 |
|