您的位置:首页 > 运维架构 > Linux

Linux下多线程编程学习

2017-04-21 10:48 281 查看
在windows下已经基本上能够实现多线程了。接下来进行linux端的探索,结合网上的代码进行了一定的修改。

下一步进行的计划就是把FjBeater客户端在linux下进行移植。

再下一步计划,就是写出能够双平台编译的通用代码。





  
#include<pthread.h>

#include<stdio.h>

#include<string.h> // for memset function

#include<unistd.h> // for sleep() function

#define MAX 10

 

pthread_t thread[2];

pthread_mutex_t mut;
int number=0,i;

 

void *thread1(void* a){

   
printf("thread1: I'm thread
1\n");

   for(i=0;i<MAX;i++){

       
printf( "thread1:
number=%d\n" ,number );

       
pthread_mutex_lock(&mut);

           
number++;

       
pthread_mutex_unlock(&mut);

       
sleep(2);

    }

    printf(
"thread1: is it the main
thread waiting for me to finish?\n"
);

   
pthread_exit(NULL);

}

 

void *thread2(void* a){

    printf(
"thread2: I'm thread
2\n" );

   for(i=0;i<MAX;i++){

       
printf( "thread2:
number=%d\n" ,number);

       
pthread_mutex_lock(&mut);

           
number++;

       
pthread_mutex_unlock(&mut);

       
sleep(3);

    }

    printf(
"thread2: is it the main
thread waiting for me to finish?\n"
);

   
pthread_exit(NULL);

}

 

void
thread_create(void){

   int temp;

   
memset(&thread,0,sizeof(thread));

   if(
(temp=pthread_create(&thread[0],NULL,thread1,NULL))!=0
){

       
printf( "thread1 create
failure!\n" );

   
}else{

       
printf( "thread1 has been
create!\n" );

    }

   if(
(temp=pthread_create(&thread[1],NULL,thread2,NULL))!=0
){

       
printf( "thread2 create
failure!\n" );

   
}else{

       
printf( "thread2 has been
create!\n" );

    }

}

 

void thread_wait(void){

   if(thread[0]!=0){

       
pthread_join(thread[0],NULL);

       
printf( "thread1 has been
stop.\n" );

    }

   if(thread[1]!=0){

       
pthread_join(thread[1],NULL);

       
printf( "thread2 has been
stop.\n" );

    }

}

int main(){

   
pthread_mutex_init(&mut, NULL);

    printf(
"I'm main thread! Creating
sub-thread now.\n" );

   
thread_create();

    printf(
"I'm main thread! Waiting
for sub-thread stop.\n" );

   
thread_wait();

   

   return 0;

}

  

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: