指针的好处

#include <pthread.h>  
#include <stdio.h>  
#include <sys/time.h>  
#include <string.h>
#include <stdlib.h>  
#define MAX 10  
pthread_t thread[2];  
pthread_mutex_t mut;  
int number=0, i;  
struct parameter{
 char* fd;
 int hit;
};
void *threadd(void* data)  
{  
        struct parameter *p;
        p=(struct parameter*)data;
        int fd=p->fd;
        int hit=p->hit;
        printf ("thread : I'm thread %d,%d\n",fd,hit);  
         while(i<MAX){
              //  printf("thread%d : number = %d\n",threadNum,number);  
                pthread_mutex_lock(&mut); 
                printf("thread%d : number = %d,i = %d\n",fd,number,i); 
                        number++;  
                printf("thread%d : number = %d,i = %d\n",fd,number,i);
                i++;
                pthread_mutex_unlock(&mut); 
               sleep(1); 
       }   
        printf("thread%d :主函数在等我完成任务吗?\n",fd);  
        free(p);
        pthread_exit(NULL);  
}
void thread_create(void)  
{  
        int temp;  
        memset(&thread, 0, sizeof(thread));            
        /*创建线程*/ 

       //struct parameter p;
        // p.fd=555;
        // p.hit=666       

 struct parameter*pptr=malloc(sizeof(struct parameter));

        pptr->fd="555";
        pptr->hit=666;
       if((temp = pthread_create(&thread[0], NULL, threadd, pptr)) != 0)//pthread_create函数和主进程不是按顺序执行,因此若用p而不是pptr为threadd传递参数
                                                                         //会导致thread_create函数(是自定义的函数,不是pthread_create函数)执行到大括号而结束,而此时pthread_create函数还没有执行完,而使得p中的值失效。
printf("线程1创建失败!\n"); else printf("线程1被创建\n"); struct parameter*qptr=malloc(sizeof(struct parameter)); qptr->fd="777"; qptr->hit=888; if((temp = pthread_create(&thread[1], NULL, threadd, qptr)) != 0) printf("线程2创建失败"); else printf("线程2被创建\n"); // sleep(3); } void thread_wait(void) { /*等待线程结束*/ if(thread[0] !=0) { pthread_join(thread[0],NULL); printf("线程1已经结束\n"); } if(thread[1] !=0) { pthread_join(thread[1],NULL); printf("线程2已经结束\n"); } } int main() { /*用默认属性初始化互斥锁*/ pthread_mutex_init(&mut,NULL); printf("我是主函数哦,我正在创建线程,呵呵\n"); thread_create(); printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n"); thread_wait(); return 0; }

 

posted on 2017-06-13 23:15  freshman2014  阅读(503)  评论(0编辑  收藏  举报

导航