日期:2014-05-16 浏览次数:20802 次
#include <stdlib.h> #include <pthread.h> struct foo { int f_count; //[color=#FF0000]引用计数[/color] 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); } }