作者:kangear
邮箱:
多线程,国嵌的pthread_create.c中两个创建线程,两个函数都只分析一个:
thread_create.c
- #include <stdio.h> //printf()
- #include <pthread.h> //pthread_create() pthread_join()
- void *myThread1(void) //返回指针值的函数 下详
- {
- int i; //函数是一个循环,没什么可说的
- for (i=0; i<2; i++)
- {
- printf("This is the 1st pthread,created by zieckey.\n");
- sleep(1);//Let this thread to sleep 1 second,and then continue to run
- }
- }
- void *myThread2(void)
- {
- int i;
- for (i=0; i<2; i++)
- {
- printf("This is the 2st pthread,created by zieckey.\n");
- sleep(1);
- }
- }
- int main() //主函数
- {
- int i=0, ret=0; //初始化两个变量
- pthread_t id1,id2; // pthread_t:《UNIX书》书上线程标识符 P288
-
- /*创建线程1(多线程第一步:创建线程(线程处于就绪态))*/
- ret = pthread_create(&id1, NULL, (void*)myThread1, NULL);
- if (ret) //ret=0表示创建成功,否侧表示出错
- //if(ret) 等同于 if(ret !=0 ) 更容易理解
- { //如果出错就打印错误信息
- printf("Create pthread error!\n");
- return 1;
- }
-
- /*创建线程2*/
- ret = pthread_create(&id2, NULL, (void*)myThread2, NULL);
- if (ret)
- {
- printf("Create pthread error!\n");
- return 1;
- }
-
- pthread_join(id1, NULL); //下详细解释
- pthread_join(id2, NULL);
- return 0;
- }
pthread_join():如果最后没有pthread_join()那么线程就不会执行(如果主程序加上sleep()也可以执行)
1, 只要有其中一个就可以让 id1 id2都执行
2, 函数中sleep()像是乒乓球拍,在主程序中遇到pthread_join()就进入了乒乓时间,是 id1 id2运行顺序并不清楚,但是都是 id2 id1 id2 id1或者是反序运行,因为遇到sleep()就跳。
3, id1 id2都运行之后就会退出线程,而主程序则会继续向下运行。
返回指针的函数:(谭老师这有详细解释)
阅读(7530) | 评论(0) | 转发(0) |