3.16 分别用clone()和pthread_creat()创建两种不同模式的线程(作业题)

论坛 期权论坛 脚本     
已经匿名di用户   2021-11-2 17:22   2406   0

此题我分别做了两个实验,没有放到一个里面去.请大家分开复制.代码不是很长,也没有什么实际意义,就是区分一下两个模式.

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;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP