指针好处之一

 
#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而不是
          printf("线程1创建失败!\n");                                  //pptr为threadd传递参数会导致thread_create函数(是自定义的函
        else                                                           // 数,不是pthread_create函数)执行到大括号而结束,而此时
           printf("线程1被创建\n");                                    //pthread_create函数创建的线程还没有执行完,但p已经失效。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值