MyException - 我的异常网
当前位置:我的异常网» C语言 » Unix系统编程11-7的三处不解,求解释

Unix系统编程11-7的三处不解,求解释

www.MyException.Cn  网友分享于:2013-02-20  浏览:6次
Unix系统编程11-7的3处不解,求解释
下面是代码,有几处不明白的地方
红色的地方为表面不明白的地方
1
根据C语言先申明后引用的原则
strcut foo *fp[NASH]; 
foo是从哪里来的呢?
2
fp->f_next = fh[idx];
fh[idx] = fp->f_next;
这样2句同样的效果吗?还是另有所指向
3
fp->f_next = fh[idx];
fp->f_next等于结构体数组指针idx处,但是我有点不明白,idx之前的地址呢? 指向不确定的位置吗?




#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;        /*protected by hashlock*/
        pthread_mutex_t f_lock;
        struct foo              *f_next;        /*protected by hashlock*/
        int                             f_id;
        /*...more stuff here...*/
};

/* allocate the object*/
struct foo
foo_alloc(void)
{
        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;
                pthread_mutex_lock(&fp->f_lock);
                pthread_mutex_unlock(&hashlock);
                /* ...continue initialization...*/

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有