线程的资源释放(一)

简介:
因为研究线程的资源释放问题,从网上学习了程序,并进行了改写。

看代码:

复制代码
#include<pthread.h>  
#include<stdio.h>  
#include<unistd.h>

using namespace std;
pthread_key_t  key;  

void  echomsg(void*  p){  
   int  t=  *(int*)p;  
   printf("destructor excuted in thread  %d, param=%d\n  ",pthread_self(),t);  
}  
 
void*  child1(void*  arg){  
   int  *ptid=  new  int;  
   *ptid=pthread_self(); 
   printf(  "child1  %d  enter\n  ",*ptid); 
   pthread_setspecific(key,   (void*)ptid  );
   sleep(2); 
   printf("child1 %d returns %d\n ",*ptid,*((int*)pthread_getspecific(key))); 
   sleep(5);
   pthread_exit(NULL);  
   return  NULL;  
}  
 
void*  child2(void*  arg){
    int* ptid=  new  int;  
    *ptid=pthread_self();  
    printf(  "child2  %d  enter\n  ",*ptid);  
    pthread_setspecific(key,(void*)ptid);  

    sleep(1);  
    printf("child2 %d returns %d\n ",*ptid, *((int*) pthread_getspecific(key)));  
    sleep(5);  
    pthread_exit(NULL);  
    return  NULL;  
}
 
int  main(){  
           pthread_t  tid1,tid2;  
           printf(  "hello\n  ");  

           pthread_key_create(&key,echomsg);  
           pthread_create(  &tid1 ,   NULL,   child1 ,  NULL);  
           pthread_create(  &tid2,    NULL,   child2 ,  NULL);  

           //pthread_join(tid1,NULL);  
           //pthread_join(tid2,NULL);  

           sleep(30);  
           pthread_key_delete(key);  
           printf(  "main  thread  %d  exit\n  ",pthread_self());               
           return  0;  
}  
复制代码
因为主进程的睡眠时间很长(30秒),所以大家两个线程都有机会完成资源释放部分的代码。


本文转自健哥的数据花园博客园博客,原文链接:http://www.cnblogs.com/gaojian/archive/2012/08/29/2651298.html,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
缓存 安全 Java
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
|
29天前
|
存储 算法 Linux
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
【Linux 系统标准 进程资源】Linux 创建一个最基本的进程所需的资源分析,以及线程资源与之的差异
25 0
|
1月前
|
算法 安全 Unix
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
30 0
|
6月前
|
Linux Go 调度
Go 协程为什么比进程和线程占用的系统资源低?
Go 协程为什么比进程和线程占用的系统资源低?
37 0
|
6月前
|
Java 数据库
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源
【JavaSE专栏79】线程死锁,多个线程被阻塞,等待彼此持有的资源
|
9月前
|
安全 Java
Java多线程——生命周期、并发、临界资源问题
是进程执行的最小单元。这样说是不是很抽象?比方拿我们的浏览器来说,一个浏览器可以同时下载几幅图片,可以边听歌的同时边聊天、边播放视频的同时还可以打印文件,这每一个行为我们都可看作是一个不同的线程,不同的线程可以同时运行。
|
11月前
|
Java
Java Review - 线程池资源一直不被释放案例&源码分析
Java Review - 线程池资源一直不被释放案例&源码分析
218 0
|
Java
Java多线程之线程池(合理分配资源)
3个核心线程都在忙,100个任务都排满了,那就只能找临时员工了
170 0
|
数据库连接
防止多线程同时操作一个资源,不能不学的JUC工具类: Semaphore详解
在工作中我们经常需要考虑对资源的使用,避免资源被过度使用或者资源没有被利用到而造成的问题,那我们该如何去限制访问某些资源的线程数目,从而对完成资源的保护。
【多线程】面试官:如何利用线程工具,防止多线程同时操作一个资源?
通过前面的学习,知道了线程的利与弊,正确的使用多线程,会尽最大的可能去压榨我们系统的资源,从而提高效率,但是如果不合理使用线程,可能会造成副作用,给系统带来更大的压力,进一步的思考,如何才能防止多线程操作一个资源?