题目
在Ubuntu环境使用pthread_create函数创建两个线程A和B.线程A在屏幕上用while循环顺序递增的输出1-1000的自然数,线程B在屏幕上用while循环顺序递减的输出1000-1自然然数,为避免输出太快,没隔1s输出一个树。
思路
Linux中可以用pthead.h库中的pthread_create函数创建不同功能的线程(区别与fork()函数)。先编写函数A和B实现自己的功能,再到主线程main()中创建两个进程。
代码
#include"stdio.h"
#include"unistd.h"
#include"pthread.h"
#include"stdlib.h"
void * a();
void * b();
int main(){
pthread_t t1,t2;
pthread_create(&t1,NULL,a,NULL);
pthread_create(&t2,NULL,b,NULL);
printf("this main thread\n");
pthread_exit(NULL);
}
void * a(void *arg){
int i;
for(i=0;i<=1000;i++){
printf("%d\n",i);
sleep(1);
}
return NULL;
}
void * b(void *arg){
int i;
for(i=1000;i>=0;i--){
printf("%d\n",i);
sleep(1);
}
return NULL;
}
总结
1.pthread_create在pthread.h库中,它的函数原型为int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,void *(*start_rtn)(void*),void *arg);
返回值0,则创建成功,返回值为-1创建失败。从左到右四个参数分别为指向线程标识符的指针,设置线程属性,线程运行函数的起始地址,运行函数的参数.
2.由于linux库中没有pthread.h,编译要加参数-lpthread。
3.sleep(int s)函数在unistd.h中,功能时线程处于就绪状态s秒。
4.在主线程中需要使用pthread_exit(NULL)等待其他线程运行结束,否则主线程直接返回。