zoukankan      html  css  js  c++  java
  • advacing lnux program 4.1.5 Thread Attributes[copy]

    Thread attributes provide a mechanism for fine-tuning the behavior of individual      
    threads. Recall that pthread_createaccepts an argument that is a pointer to a thread
    attribute object. If you pass a null pointer, the default thread attributes are used to
    configure the new thread. However, you may create and customize a thread attribute
    object to specify other values for the attributes.
    To specify customized thread attributes, you must follow these steps:
    1. Create a pthread_attr_tobject.The easiest way is simply to declare an auto-matic variable of this type. |声明pthread_attr_tobject变量
    2. Call pthread_attr_init, passing a pointer to this object.This initializes the  |调用pthread_attr_init函数
    attributes to their default values.
    3. Modify the attribute object to contain the desired attribute values.   |根据需要更改属性对象
    4. Pass a pointer to the attribute object when calling pthread_create.   |pthread_create中传递属性对象
    5. Call pthread_attr_destroyto release the attribute object.The pthread_attr_t  |调用pthread_attr_destroy销毁对象
    variable itself is not deallocated; it may be reinitialized with pthread_attr_init.
    A single thread attribute object may be used to start several threads. It is not necessary
    to keep the thread attribute object around after the threads have been created.


    For most GNU/Linux application programming tasks, only one thread attribute is
    typically of interest (the other available attributes are primarily for specialty real-time
    programming).This attribute is the thread’s detach state. A thread may be created as a
    joinable thread (the default) or as a detached thread. A joinable thread, like a process, is not
    automatically cleaned up by GNU/Linux when it terminates. Instead, the thread’s exit
    state hangs around in the system (kind of like a zombie process) until another thread
    calls pthread_jointo obtain its return value. Only then are its resources released. A
    detached thread, in contrast, is cleaned up automatically when it terminates. Because a
    detached thread is immediately cleaned up, another thread may not synchronize on its
    completion by using pthread_joinor obtain its return value.

    To set the detach state in a thread attribute object, use pthread_attr_setdetachstate.
    The first argument is a pointer to the thread attribute object, and the second is the
    desired detach state. Because the joinable state is the default, it is necessary to call this only
    to create detached threads; pass PTHREAD_CREATE_DETACHEDas the second argument.
    The code in Listing 4.5 creates a detached thread by setting the detach state thread
    attribute for the thread.
    Listing 4.5 (detached.c) Skeleton Program That Creates a Detached Thread
    #include <pthread.h>
    void* thread_function (void* thread_arg)
    {
    /* Do work here... */
    }
    int main ()
    {
    pthread_attr_t attr;
    pthread_t thread;
    pthread_attr_init (&attr);
    pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
    pthread_create (&thread, &attr, &thread_function, NULL);
    pthread_attr_destroy (&attr);
    /* Do work here... */
    /* No need to join the second thread. */
    return 0;
    }


    Even if a thread is created in a joinable state, it may later be turned into a detached
    thread.To do this, call pthread_detach. Once a thread is detached, it cannot be made
    joinable again.

    // 等待线程如何clean  up 呢 ????

  • 相关阅读:
    如何快速查看archlinux pacman 软件记录?
    如何快速判断检查主机ip端口是否存活?
    如何在不清楚有哪些tag的情况下拉取docker镜像?
    如何使用docker版Openresty测试框架Test::Nginx进行测试?
    .net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bund
    zen coding de 一些快捷功能
    C# Xpath
    一个SQL SERVER查询分析器非常好用的工具
    探索MSSQL执行计划
    博客园武林人士
  • 原文地址:https://www.cnblogs.com/michile/p/2890784.html
Copyright © 2011-2022 走看看