• Thread(简单使用)


    /***
    thread.c
    ***/
    #include<stdio.h> #include<stdlib.h> #include<pthread.h> void print_message_function(void* ptr); int main() { int tmp1,tmp2; void* retval; pthread_t thread1,thread2; char* message1 = "thread1"; char* message2 = "thread2"; int ret_thrd1,ret_thrd2; ret_thrd1 = pthread_create(&thread1,NULL,(void*)&print_message_function,(void*)message1); ret_thrd2 = pthread_create(&thread2,NULL,(void*)&print_message_function,(void*)message2); if(ret_thrd1 != 0) { printf("create thread 1 failed "); } else { printf("create thread 1 success "); } if(ret_thrd2 != 0) { printf("create thread 2 failed "); } else { printf("create thread 2 success "); } tmp1 = pthread_join(thread1,&retval); printf("thread1 return value(retval) is %d ",(int)retval); printf("thread1 return value(tmp) is %d ",tmp1); if(tmp1 != 0) { printf("cannot join with thread1 "); } printf("thread1 end "); tmp2 = pthread_join(thread2,&retval); printf("thread2 return value(retval) is %d ",(int)retval); printf("thread2 return value(tmp) is %d ",tmp2); if(tmp2 != 0) { printf("cannot join with thread2 "); } printf("thread2 end "); return 0; } void print_message_function(void* ptr) { int i; for(i = 0; i < 5; i++) { printf("%s:%d ",(char*)ptr,i); } }

    运行结果:

    exbot@ubuntu:~/wangqinghe/thread/thread_0530$ ./thread
    create thread 1 success
    create thread 2 success
    thread2:0
    thread2:1
    thread2:2
    thread2:3
    thread2:4
    thread1:0
    thread1:1
    thread1:2
    thread1:3
    thread1:4
    thread1 return value(retval) is 10
    thread1 return value(tmp) is 0
    thread1 end
    thread2 return value(retval) is 10
    thread2 return value(tmp) is 0
    thread2 end

    /***
    simple example
    ***/
    #include<stdio.h>
    #include<pthread.h>
    
    void thread(void)
    {
        int i;
        for(i = 0; i < 3; i++)
        {    
            printf("This is a pthread.
    ");
        }
    }
    
    
    int main()
    {
        pthread_t id;
        int i,ret;
        ret = pthread_create(&id,NULL,(void*)thread,NULL);
        if(ret != 0)
        {
            printf("Create pthread error!
    ");
            exit(1);
        }
        for(i = 0; i < 3; i++)
        {
            printf("This is the main process.
    ");
        }
        pthread_join(id,NULL);
        return 0;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/thread/thread_0530$ ./thread1
    This is the main process.
    This is the main process.
    This is the main process.
    This is a pthread.
    This is a pthread.
    This is a pthread.

    /***
    pthread.c
    ***/
    //gcc pthread.c -o pthread -lpthread
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<unistd.h>
    #include<pthread.h>
    
    void * print_a(void*);
    void * print_b(void*);
    
    int main()
    {
        pthread_t t0;
        pthread_t t1;
        
        if(pthread_create(&t0,NULL,print_a,NULL) == -1)
        {
            puts("fail to create pthread t0");
            exit(1);
        }
        if(pthread_create(&t1,NULL,print_b,NULL) == -1)
        {
            puts("fail to create pthread t1");
            exit(1);
        }
        void* result;
        if(pthread_join(t0,&result) == -1)
        {
            puts("fail to recollect t0");
            exit(1);
        }
        if(pthread_join(t1,&result) == -1)
        {
            puts("fail to create recollect t1");
            exit(1);
        }
        return 0;
    }
    
    void * print_a(void*)
    {
        for(int i = 0; i < 10 ; i++)
        {
            sleep(1);
            puts("aa");
        }
        return NULL;
    }
    void * print_b(void*)
    {
        for(int i = 0; i < 20; i++)
        {
            sleep(1);
            puts("bb");
        }
        return NULL;
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/thread$ ./pthread
    bb
    aa
    bb
    aa
    bb
    aa
    bb
    aa
    aa
    bb
    bb
    aa
    bb
    aa
    aa
    bb
    bb
    aa
    aa
    bb
    bb
    bb
    bb
    bb
    bb
    ^C

    /***
    no_mutex.c
    ***/
    #include<stdio.h>
    #include<stdlib.h>
    #include<pthread.h>
    
    int sharedi = 0;
    void increase_num(void);
    
    int main()
    {
        int ret;
        pthread_t thrd1,thrd2,thrd3;
        ret = pthread_create(&thrd1,NULL,(void *)increase_num,NULL);
        ret = pthread_create(&thrd2,NULL,(void*)increase_num,NULL);
        ret = pthread_create(&thrd3,NULL,(void*)increase_num,NULL);
        pthread_join(thrd1,NULL);
        pthread_join(thrd2,NULL);
        pthread_join(thrd3,NULL);
    
        printf("sharedi = %d
    ",sharedi);    
    
        return 0;
    }
    
    void increase_num(void)
    {
        long i,tmp;
        for(i = 0 ; i  < 1000; i++)
        {
            tmp = sharedi;
            tmp = tmp + 1;
            sharedi = tmp;
        }
    }

    运行结果:

    exbot@ubuntu:~/wangqinghe/thread/thread_0611$ ./no_mutex
    sharedi = 3000

  • 相关阅读:
    maven本地添加Oracle包
    tomcat启动时检测到循环继承而栈溢出的问题:Caused by: java.lang.IllegalStateException: Unable to complete the scan for annotations for web application [/test] due to a StackOverflowError. Possible root causes include
    C# LINQ list遍历并组装返回新查询
    windows server 2016下360wifi安装
    Python获取本机多IP并指定出口IP
    python读取excel和读取excel图片总结
    windows2012/2016/2019 iis自带ftp被动端口修改
    Flutter IOS build成功,archive失败
    centos常用操作
    Git相关操作
  • 原文地址:https://www.cnblogs.com/wanghao-boke/p/11244979.html
Copyright © 2020-2023  润新知