linux下的POSIX C 多线程编程 helloworld

来源:互联网 发布:化妆品原料淘宝 编辑:程序博客网 时间:2024/05/17 00:56
#include<pthread.h>#include<stdio.h>#include<unistd.h>#include<string.h>#define MAX 10pthread_t thread[2];pthread_mutex_t mut;int number = 0;int i;void* thread1( void *param ){        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: 主函数等我完成任务吗? \n " );        pthread_exit( NULL );        return ( void* )0;}void* thread2( void* param ){        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: 主函数在等我完成任务吗? \n" );        pthread_exit( NULL );        return ( void* )0;}void thread_create( void ){        int temp;        memset( &thread, 0, sizeof( thread ) );        // 创建线程1        if( ( temp = pthread_create( &thread[0], NULL, thread1, NULL ) ) != 0 )        {                printf( "线程1创建失败!\n" );        }        else        {                printf( "线程1被创建\n" );        }        // 创建线程2        if( ( temp = pthread_create( &thread[1], NULL, thread2, NULL ) ) != 0 )        {                printf( "线程2创建失败!\n" );        }        else        {                printf( "线程2被创建\n" );        }}void thread_wait( void ){        // 主函数等待线程1结束        if ( thread[0] != 0 )        {                pthread_join( thread[0], NULL );                printf( "线程1已经结束\n" );        }        // 主函数等待线程2结束        if ( thread[1] != 0 )        {                pthread_join( thread[1], NULL );                printf( "线程2已经结束\n" );        }}int main(){        // 初始化互斥锁        pthread_mutex_init( &mut, NULL );        printf( "我是main函数,正在创建线程...\n" );        thread_create();        printf( "我是主函数,正在等待线程完成任务...\n" );        thread_wait();        printf( "main函数已退出\n" );        return 0;}

// main output1 

我是main函数,正在创建线程...线程1被创建线程2被创建我是主函数,正在等待线程完成任务...thread1: I'm thread 1 thread2: I'm thread 2thread1: number = 0thread2: number = 0thread1: number = 2thread2: number = 3thread1: number = 4thread2: number = 5thread1: number = 6thread1: number = 7thread2: number = 8thread1: number = 9thread2: number = 10thread1: 主函数等我完成任务吗? 线程1已经结束thread2: 主函数在等我完成任务吗?线程2已经结束main函数已退出

// main output2

我是main函数,正在创建线程...线程1被创建线程2被创建我是主函数,正在等待线程完成任务...thread1: I'm thread 1 thread1: number = 0thread2: I'm thread 2thread2: number = 1thread1: number = 2thread2: number = 3thread1: number = 4thread2: number = 5thread1: number = 6thread1: number = 7thread2: number = 8thread1: number = 9thread2: number = 10thread1: 主函数等我完成任务吗? 线程1已经结束thread2: 主函数在等我完成任务吗?线程2已经结束main函数已退出


g++编译命令如下: g++ -lpthread -o helloworld.out helloworld.cpp


问题:两个线程共同完成任务,但是对于共享变量 i 没有互斥加锁操作,所以以上多线程程序还是存在问题的!


为了达到兼容可移植的目的,POSIX给出了C语言下的多线程编程库 pthread,具体的学习资料请参考一下链接

http://blog.csdn.net/future_fighter/article/details/3865071

http://blog.csdn.net/sunboy_2050/article/details/5921003

http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/index.html

原创粉丝点击