#include<stdlib.h>
#include<pthread.h>
struct foo{
int f_count;
pthread_mutex_t f_lock;
};
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);
}
}
return (fp);
}
void foo_hold(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
fp->f_count++;
pthread_mutex_unlock(&fp->f_lock);
}
void foo_release(struct foo *fp)
{
pthread_mutex_lock(&fp->f_lock);
if( - - fp->f_count==0)//类似于OC里的内存释放
{
pthread_mutex_unlock(&fp->f_lock);
pthread_mutex_destrory(&fp->f_lock);
free(fp);
}
else
{
pthread_mutex_unlock(&fp->f_lock);
}
}