免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1952 | 回复: 4
打印 上一主题 下一主题

[C] APUE这段是不是写错了? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-20 13:49 |只看该作者 |倒序浏览
中文版304页,英文版376页

#include <stdlib.h>
#include <pthread.h>

#define NHASH 29
#define HASH(fp) (((unsigned long)fp)%NHASH)

struct foo *fh[NHASH];

pthread_mutex_t hashlock = PTHREAD_MUTEX_INITIALIZER;

struct foo {
        int             f_count;
        pthread_mutex_t f_lock;
        struct foo     *f_next; /* protected by hashlock */
        int             f_id;
        /* ... more stuff here ... */
};

struct foo *
foo_alloc(void) /* allocate the object */
{
        struct foo        *fp;
        int                        idx;

        if ((fp = malloc(sizeof(struct foo))) != NULL) {
                fp->f_count = 1;
                if (pthread_mutex_init(&fp->f_lock, NULL) != 0) {
                        free(fp);
                        return(NULL);
                }
                idx = HASH(fp);
                pthread_mutex_lock(&hashlock);
                fp->f_next = fh[idx];
                fh[idx] = fp->f_next;
/*对于一个hash表,增加的时候这里是不是应该写fh[idx] = fp ???*/
                pthread_mutex_lock(&fp->f_lock);
                pthread_mutex_unlock(&hashlock);
                /* ... continue initialization ... */
                pthread_mutex_unlock(&fp->f_lock);
        }
        return(fp);
}

论坛徽章:
0
2 [报告]
发表于 2011-01-20 13:51 |只看该作者
最后在http://www.apuebook.com/errata.html的15条找到了作者的勘误,证实了这一点

论坛徽章:
0
3 [报告]
发表于 2011-01-30 14:58 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2011-01-30 22:27 |只看该作者
...我看APUE时,好像没有一个例子是认真看的..还有好多例子,其本一个字也没看..

论坛徽章:
0
5 [报告]
发表于 2011-01-30 22:33 |只看该作者
赞,楼猪看的非常仔细。apue也算是看过几遍,却忽略了绝大多数的例子。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP