zoukankan      html  css  js  c++  java
  • 线程的终止和pthread_join的理解

    #include "stdafx.h"
    #include <pthread.h>
    #include <stdio.h>
    
    void * thread_routine(void*arg);
    void * thread_routine(void*arg)
    {
        return arg;
    }
    int main(int argc, _TCHAR  *argv[])
    {
    
        pthread_t thread_id;
        void *thread_result;
        int status;
        pthread_attr_t attr;
        pthread_attr_init(&attr);
        pthread_attr_setscope(&attr, PTHREAD_SCOPE_PROCESS);
        pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); // 这个属性说明了线程是如何结束的
        // PTHREAD_CREATE_JOINABLE 同步结束    需要pthread_join 
        // PTHREAD_CREATE_DETACHED 异步结束    pthread_join没有作用
        status = pthread_create(&thread_id, &attr, thread_routine, NULL);
        if (status != 0)
        {
            perror("pthread_create eror
    ");
        }
        status = pthread_join(thread_id, &thread_result);
        if (status != 0)
        {
            perror("join pthread 
    ");
        }
    
        printf("status is %d thread_result is %p
    ", status,thread_result);
    
        if (thread_result == NULL)
        {
            while (1);
            return 0;
        }
        else
        {
            while (1);
            return 1;
        }
    
    
        while (1);
    }

    大佬说 : fork 和 join 一对词     

    pthread_join : wait意思  等待资源 被释放    还有一个好处就是被等待的线程应该将返回值或任何其他信息保存在某个公共位置,并将条件变量广播给所有在其上等待的线程

    以唤醒他们。

    enum {
    /*
     * pthread_attr_{get,set}detachstate
     */
      PTHREAD_CREATE_JOINABLE       = 0,  /* Default */
      PTHREAD_CREATE_DETACHED       = 1,
    
    /*
     * pthread_attr_{get,set}inheritsched
     */
      PTHREAD_INHERIT_SCHED         = 0,
      PTHREAD_EXPLICIT_SCHED        = 1,  /* Default */
    
    /*
     * pthread_{get,set}scope
     */
      PTHREAD_SCOPE_PROCESS         = 0,
      PTHREAD_SCOPE_SYSTEM          = 1,  /* Default */
    
    /*
     * pthread_setcancelstate paramters
     */
      PTHREAD_CANCEL_ENABLE         = 0,  /* Default */
      PTHREAD_CANCEL_DISABLE        = 1,
    
    /*
     * pthread_setcanceltype parameters
     */
      PTHREAD_CANCEL_ASYNCHRONOUS   = 0,
      PTHREAD_CANCEL_DEFERRED       = 1,  /* Default */
    
    /*
     * pthread_mutexattr_{get,set}pshared
     * pthread_condattr_{get,set}pshared
     */
      PTHREAD_PROCESS_PRIVATE       = 0,
      PTHREAD_PROCESS_SHARED        = 1,
    
    /*
     * pthread_barrier_wait
     */
      PTHREAD_BARRIER_SERIAL_THREAD = -1
    };

    PTHREAD_CREATE_JOINABLE: 一个没有被分离的线程终止时会保留其虚拟内存,包括他们的堆栈和其他系统资源。

    PTHREAD_CREATE_DETACHED:分离线程意味着通知系统不再需要此线程,允许系统将分配给它的资源回收。

    一勤天下无难事。
  • 相关阅读:
    永久修改cmd字体、大小、编码
    Linux总结--vi与vim
    VBox配置虚拟机固定IP可上网
    Redis之三--数据类型
    Linux常用小命令
    Redis之二--单节点搭建
    Linux二
    Java 基础类之三
    Java 基础类之二
    JAVA语言的基本元素:类和对象
  • 原文地址:https://www.cnblogs.com/nowroot/p/12635130.html
Copyright © 2011-2022 走看看