zoukankan      html  css  js  c++  java
  • linux pthread之学习篇

    在应用程序编程中,为了不影响与用户交互的性能,通常需要创建新的线程来处理一些比较耗时的、
    不影响用户体验的工作。而这又通常分为两种情况:
    (1)需要临时创建一个线程来做某件特定的事,等事情做完时线程即可销毁;
    (2)需要创建一个固定的线程一直监控某件事的发生。

    pthread是一个遵守POSIX标准的线程库,我们可以使用pthread来轻松的完成我们的需求。
    虽然pthread是遵守POSIX标准的库,但它却不是linux的默认库,所以如果要使用pthread,
    必须要link libpthread.a才可以。

    如果你要临时的创建一个线程去做一件事,代码示例之一:
    #include <pthread.h>

    void* _pthread_do_something(void* arg)
    {
        pthread_detach(pthread_self());
        do_something();
        return null;
    }

    int main()
    {
        pthread_t pthread = 0;
        pthread_create(&pthread, null, _pthrad_do_something, arg);
        exit(1);
    }

    pthread有joinable和unjoinable两种状态,默认情况下在pthread create时会预设为joinable状态,
    如果是joinable状态的线程,那么在线程退出时即使调用了pthread_exit也也不会释放线程所占用的
    堆栈和线程描述符,从而就会造成线程资源泄漏。

    有三种方法可以将线程设置为unjoinable状态:
    (1) 用户在pthread create创建线程时指定线程为unjoinable状态;
    (2) 在线程创建后,在线程函数中调用pthread_detach(pthread_self())将自己置为unjoinable状态,
    如上面示例一所示;
    (3) 在主线程中调用pthread_join,这样主线程会等到新创建线程的结束才会结束。

    代码示例之二:
    #include <pthread.h>

    void* _pthread_do_something(void* arg)
    {
        do_something();
        pthread_exit();
        return null;
    }

    int main()
    {
        pthread_t pthread = 0;
        pthread_create(&pthread, null, _pthrad_do_something, arg);
        pthread_join(pthread, null);
        exit(1);
    }

    如果你的线程要一直用来监控某件事是否发生,那就不要退出线程了,看代码示例之三:
    #include <pthread.h>

    void* _pthread_do_something(void* arg)
    {
        while(1)
        {
            do_something();
        }
        pthread_exit();
        return null;
    }

    int main()
    {
        pthread_t pthread = 0;
        pthread_create(&pthread, null, _pthrad_do_something, arg);
        pthread_join(pthread, null);
        exit(1);
    }

    目前本人对pthread的理解还比较肤浅,后面有更深刻的心得体会时会再分享出来。
    欢迎大家一起讨论和交流。

  • 相关阅读:
    Linux命令——mkdir
    UNIX 高手的 10 个习惯
    Linux命令——pwd
    Linux命令——cd命令
    Linux命令——ls命令
    denyhost安装脚本
    三台服务器无需密码相互访问
    字符串方法
    nginx简易安装
    shell 条件判断语句整理
  • 原文地址:https://www.cnblogs.com/riskyer/p/3315328.html
Copyright © 2011-2022 走看看