当前位置:  技术问答>linux和unix

apue程序清单11-5的疑问

    来源: 互联网  发布时间:2017-03-09

    本文导语:  #include  #include  struct foo { int f_count; //引用计数 pthread_mutex_t f_lock; /* ... more stuff here ... */ }; struct foo *foo_alloc(void) { struct foo *fp; if ((fp = malloc(sizeof(struct foo))) != NULL) { fp->f_count = 1; if (pthread_mutex_init(&fp->...


#include 
#include 

struct foo
{
int f_count; //引用计数
pthread_mutex_t f_lock;
/* ... more stuff here ... */
};

struct foo *foo_alloc(void)
{
struct foo *fp;

if ((fp = malloc(sizeof(struct foo))) != NULL)
{
fp->f_count = 1;

if (pthread_mutex_init(&fp->f_lock, NULL) != 0)
{
free(fp);
return NULL;
}

/* ... continue initialization ... */
}
return fp;
}

/* add a reference to the object */
void foo_hold(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
fp->f_count++;
pthread_mutex_unlock(&fp->lock);
}

/* release a reference to the object */
void foo_rele(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
if (--fp->f_count == 0)
{
/* last reference */
pthread_mutex_unlock(&fp->f_lock);
//此处刚解锁别的线程恰好就调用了foo_hold会出现什么情况?
pthread_mutex_destroy(&fp->f_lock);
free(fp);
}
else
{
pthread_mutex_unlock(&fp->f_lock);
}
}

还有,foo_hold函数在什么情况下使用呢,能否举个例子

|
基本原理看样你还是懂的,Mutex互斥访问,f_count是对象引用计数。

看不出这个例子有什么实际用途,因为根本一旦f_count减少为0然后foo被释放,其他持有该foo地址的用户完全是不知情的,会造成非法内存访问。

根据我个人开发经验,类似的应用场景是这样的:

foo作为一个句柄类,内部具有f_count引用计数,然后有一个引用对象是void *ref。引用计数是为ref服务的,不是为foo服务的,这个概念很重要。

构造一个foo要求传入一个对象,然后foo设置f_count=1,ref=obj; 这通常是由一个非并发环境引起的,之后该foo被传入到并发环境,大家就可以并发的操作了,希望持有对象就给它+1,释放持有就-1.

只有在f_count为0时,该foo句柄才可以free掉obj,而foo句柄自身则由非并发环境回收。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • APUE 第二版 程序 5-2
  • APUE2 10.12小节中所给的Figure 10.14程序是不是错了?
  • APUE 有关exec() Functions的程序出错,不知道为什么?!
  • 最近看apue,程序4-10中,编译时,使用两个宏major和minor来访问主次设备号,没有定义是怎么回事,应该怎么解决呢?
  • apue里的P501页的figure 15.6程序怎么运行了没什么输出啊?
  • APUE 文件复制到分页程序 中不明白的一点求高手解答
  • 下载了APUE源码,怎么打不开啊?
  • 文件名为“apue.tar.Z”的文件在UNIX下怎么打开?大家帮帮忙
  • apue书上的概念,读过这本书的请进
  • 刚学完apue,大家给个建议
  • 求apue的课后答案~~~~~~~~~~~~~
  • APUE 看完之后,拿什么练练手?
  • apue.h的问题
  • APUE+macro
  • apue中的一个问题
  • APUE相关章节不容易理解。
  • 关于apue2 中一个例子的提问
  • apue书的的信号函数,看不懂
  • APUE中 system函数的实现中的问题
  • 哪位兄弟在看apue?相互交流一下
  • APUE中“信号”一节的问题
  • apue 上的 Figure3.10运行后,输出怎么是空白
  • apue学习问题 第八章 进程控制 相关
  • apue page113
  • 关于unix环境高级编程的apue的问题
  • 不同缓冲区长度读操作 APUE2e


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3