此题我分别做了两个实验,没有放到一个里面去.请大家分开复制.代码不是很长,也没有什么实际意义,就是区分一下两个模式.
1,用clone()的代码如下:(C++实现)
/* 作者:刘海涛 功能:在LINUX下,用clone建立线程. 环境:G++,Rad Hat Enterprise Linux,gedit 时间:2008.4.1 */
#include<sched.h> #include<iostream> using namespace std; int do_something(void *rag) { cout<<"child process do work"<<endl; exit(0); } int main(int argc,char *argv[]) { void *child_stack; int FILE_STACK=20000; //这里一定要注意啊!!! child_stack=(void *)malloc(FILE_STACK); cout<<"parent process do work"<<endl;
//clone原型 int pid=clone(do_something,(char*)child_stack+FILE_STACK,CLONE_VM|CLONE_FILES,0); if(pid==-1) { cout<<"can`t create,ERROR!"; exit(2); } sleep(1); cout<<"DON`T TURN AWAY!"<<endl; exit(0); return 0; }
2, 用pthread_creat()
/* 作者:刘海涛 功能:在LINUX下,用pthread_creat建立线程. 环境:G++,Rad Hat Enterprise Linux,gedit 时间:2008.4.1 */ #include<pthread.h> #include<iostream> using namespace std; void *thread(void*) { cout<<"i am a thread"<<endl; } int main() { pthread_t ntid; int i=4000,ret=0; ret=pthread_create(&ntid,NULL,thread,NULL); if(ret!=0) { cout<<"create pthread ERROR"; exit(1); } if(pthread_join(ntid,NULL)) { cout<<"ERROR"; } return 0; }
|