线程分离

线程分离的作用:当主线程与新线程无关时,主线程无需等待新线程的结束。

1、进程属性初始化

pthread_attr_t pth_attr; 
pthread_attr_init(&pth_attr);
2、进程分离属性设置。

pthread_attr_setdetachstate(&pth_attr,PTHREAD_CREATE_DETACHED);

3、进程创建。

4、进程属性资源回收。

pthread_attr_destroy(&pth_attr);

#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<stdlib.h>
#include<pthread.h>

void *thread_func(void *arg);
#define handle_error(msg)     do { perror(msg); exit(EXIT_FAILURE);} while(0)
char message[] = "hello Ruanchao!";
int finish=0;
int main() {
    int res;
    pthread_t thread;
    pthread_attr_t pth_attr;

    res = pthread_attr_init(&pth_attr);
    if (res != 0)
        handle_error("pthread initial is failed!");
    res = pthread_attr_setdetachstate(&pth_attr,PTHREAD_CREATE_DETACHED);
    if(res != 0)
        handle_error("pthread set attr failed!");
    res = pthread_create(&thread,&pth_attr,thread_func,(void *)message);
    if(res != 0)
        handle_error("thread creation is failed!");
    (void)pthread_attr_destroy(&pth_attr);
    while(!finish) {
        printf("Waiting for thread to end!\n");
        sleep(1);
    }
    printf("thread were finished!\n");
    exit("EXIT_FAILURE");
}
void *thread_func(void *arg){
    printf("thread_func is running,argument is %s\n",(char *)arg);
    sleep(5);
    finish = 1;
    pthread_exit(NULL);
}
时间: 2024-12-17 15:57:41

线程分离的相关文章

linux线程控制&amp;线程分离

线程概念 线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元. 线程是程序中一个单一的顺序控制流程.进程内一个相对独立的.可调度的执行单元,是系统独立调度和分派CPU的基本单位指运行中的程序的调度单位.在单个程序中同时运行多个线程完成不同的工作,称为多线程. 线程资源 由于一个程序中的多个线程共享同一地址空间,因此代码段,数据段内容是共享的.除此之外,以下内容也是共享的: 1. 文件描述符表2. 每种信号的处理方式(SIG_IGN.SIG_DFL

线程分离设置

PTHREAD_ATTR_SETDETACHSTATELinux Programmer's MaPTHREAD_ATTR_SETDETACHSTATE(3) NAME        pthread_attr_setdetachstate,   pthread_attr_getdetachstate   -  set/get        detach state attribute in thread attributes object SYNOPSIS        #include <pth

线程分离与线程互斥

一.线程分离: 概述: 在任何一一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一一个可结合的线程能够被其他线程收回其资源和杀死.在被其他线程回收之前,它的存储器资源(例如栈)是不释放的.相反,一一个分离的线程是不能被其他线程回收或杀死的,它的存储器 资源在它终止止时由系统自自动释放. 默认情况下,线程被创建成可结合的.为了避免存储器泄漏,每个可结合线程都应该要么被显示示地回收,即调用用pthread_join;要么通过调用用pthread_detach函数被分

线程分离属性

属性对象主要包括是否绑定.是否分离.堆栈地址.堆栈大小.优先级. 可能的坑: 分离状态设置后有可能线程在线程创建函数返回前就已经结束.   可以通过在线程中调用pthread_cond_timewait等待一会.   不然有可能返回的pid  并不是所想的标志当前线程的pid.

线程分离状态

分离状态的线程, 不能用pthread_join()等待它的终止状态. 例1:  修改属性, 创建分离状态线程 mypthread_attr_detach.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <pthread.h> //gcc -g mypthread_attr_detach.c -o mypthread_

高精确度且线程分离的定时器——多媒体定时器

说道定时器,很多人都会想到Windows定时器SetTimer吧!其实,项目里面原本确实是使用这种方法实现动画效果的,但是后来问题出现了!由于WM_TIMER消息优先级比较低,常常被丢失,导致一个WM_MOUSEMOVE消息都会影响整个动画的效果. 这时我就考虑,是否能给定时器创建一个单独的线程,接着就发现了"多媒体定时器"这个东西.它是一个高精确度定时器,一般的Windows定时器只能精确到55ms,而多媒体定时器能精确到10ms内.同时,在启动一个多媒体定时器的同时,会自动创建一个

线程的控制与分离

线程的控制 线程的创建: 线程创建函数:int pthread_create(pthread_t *thread,const pthread_attr_t *attr,void *(*start_routine(void*),void *arg); 返回值:成功返回0,失败返回错误号. 在一个线程中调用pthread_create()创建新的线程后,当前线程从pthread_create()返回继续往下执行,而新的线程所执行的代码由我们传给pthread_create()的函数指针star_ro

Linux下线程的控制与分离

一.线程的概念: 线程是运行在进程地址空间的,是进程的执行分流.它是执行进程内部的一个代码片段为了让进程更好的完成.也可以说,进程是承担系统资源的实体,而线程进程运行调度的基本单位. 由于同一进程的多个线程共享同一地址空间,因此Text Segment.Data Segment都是共享的,如果定义一个函数,在各线程中都可以调用,如果定义一个全局变量,在各线程中都可以访问到,除此之外,各线程还共享以下进程资源和环境: 1. 文件描述符表 2. 每种信号的处理方式(SIG_IGN.SIG_DFL或者

线程控制与分离

线程: 在一个进程的地址空间中执行多个线程 ---- 强调共享  线程是进程中的一个实体. 线程私有: 线程id 上下文信息 (包括各种寄存器的值.程序计数器和栈指针) (私有)栈空间    errno变量    信号屏蔽字    调度优先级 此时:POSIX标准   编译时  加上 -lpthread 线程与进程的区别: 1.进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位: 线程是进程的一个实体. 2.进程 强调 独占,线程 强调 共享