美文网首页
多线程资源释放

多线程资源释放

作者: Myth52125 | 来源:发表于2017-08-14 18:28 被阅读0次

正常释放

等待线程执行结束,和回收资源。

线程在函数执行结束以后,需要回收资源。
线程有两种状态joinableunjoinable
unjoinable下,线程所使用的资源不会被释放,直到joinable

pthread_join(pthread_t,void *)

使函数变为joinable

第一个参数是线程id,第二个参数可以是函数的返回值,如果是NULL表示我们不关心函数的返回值。如果需要返回值,需要先创建对应的结构体,然后传入指针,让函数填充。

程序将会在该语句出堵塞,直到线程执行完毕返回。即使有很多该函数也会依次执行。
int pthread_atfork(void (prepare)(void), void (parent)(void), void (*child)(void));

pthread_detach(pthread_t)

即使函数没执行完也可以使用该函数制定线程的状态

执行该函数后,线程中函数运行结束后直接释放所消耗的资源。

异常释放

线程异常中断,被别的线程取消执行。

在POSIX线程API中提供了一个pthread_cleanup_push()/pthread_cleanup_pop()函数对用于自动释放资源:
从pthread_cleanup_push()的调用点到pthread_cleanup_pop()之间的程序段中的终止动作(包括调用 pthread_exit()和取消点终止)都将执行pthread_cleanup_push()所指定的清理函数。

API定义如下:

void pthread_cleanup_push(void (*routine) (void  *),  void *arg)
void pthread_cleanup_pop(int execute)

pthread_cleanup_push()/pthread_cleanup_pop()采用先入后出的栈结构管理
void routine(void *arg)函数在调用pthread_cleanup_push()时压入清理函数栈,多次对pthread_cleanup_push()的调用将在清理函数栈中形成一个函数链,在执行该函数链时按照压栈的相反顺序弹出。
execute参数表示执行到pthread_cleanup_pop()时是否在弹出清理函数的同时执行该函数,为0表示不执行,非0为执行
这个参数并不影响异常终止时清理函数的执行。

pthread_cleanup_push(pthread_mutex_unlock, (void *) &mut);
pthread_mutex_lock(&mut);
/* do some work */
pthread_mutex_unlock(&mut);
pthread_cleanup_pop(0);

未完。。。

相关文章

  • 多线程资源释放

    正常释放 等待线程执行结束,和回收资源。 线程在函数执行结束以后,需要回收资源。线程有两种状态joinable和u...

  • redis高级功能-分布式锁

    同步锁 多线程访问共享资源的时候,为了防止发生资源争抢,持有资源不能释放等一系列问题,就需要锁来防止并发访问共享资...

  • JAVA中死锁问题排查和预防

    在Java多线程开发中死锁问题并不少见,当线程间相互等待资源,而又不释放自身的资源时就会导致无穷无尽的等待。 举一...

  • 多线程下关于NSTimer不释放的问题

    多线程下关于NSTimer不释放的问题 前言 前段时间由于项目需要,用到NSTimer,考虑到不占用主线程资源,故...

  • 释放资源

    很久以前,有位老师告诉我,读一本烂书最大的浪费不是买书的花费(尽管相比国外,我们的的书实际上是最便宜的,但我们还是...

  • JNI资源释放

    因为Native层资源是不被GC回收的,我们要手动释放。 有哪些资源需要释放呢? 释放之后怎么确认释放了呢? 引用...

  • Synchronized的原理分析

    Java多线程运行环境中,在哪些情况下会使对象锁释放?释放锁: 不释放锁的情况: interrupted()和is...

  • ios 资源释放

    系统级资源(对象)ARC后 大部分代码不需要手动释放,但有些还是需要自己去手动释放的。如众所周知的NSTimer、...

  • 线程中sleep()和wait()有何区别,各有什么含义 ?

    区别: (1)sleep()不会释放资源,wait()会释放资源; (2)sleep()是Thread类里的函数,...

  • Bitmap

    获取Bitmap大小 Bitmap优化 一、主动释放Bitmap资源 二、主动释放ImageView的图片资源 三...

网友评论

      本文标题:多线程资源释放

      本文链接:https://www.haomeiwen.com/subject/mfmurxtx.html