linuxでは、相互反発量を利用してデータ構造を保護するソースコードです.

1398 ワード

 
 
#include <stdlib.h>     /*malloc    */
#include <pthread.h>    /*           */ 


struct foo{					/*              */
	int		count;			/*       */
	pthread_mutex_t	mutex;			/* count    ,                     */
	/*other struction*/			/*                   ,      */
};


struct foo *					/*              ,              */
foo_alloc(void)					/*                ,      void      */
{						
	struct foo *fp;				
	if((fp=malloc(sizeof(struct foo)))!=NULL);
	{
		fp->count = 1;			/*count  1,       ,       */
		if(pthread_mutex_init(&fp->mutex,NULL)!=0)
		{
			free(fp);              /*                            */
			return(NULL);		/*          */
		}
		/*initilize other parts*/
	}
	return (fp);				/* return      ,             */
}


void
mutex_hold(struct foo *fp)			/*   count    ,               */
{
	pthread_mutex_lock(&fp->mutex);
	fp->count++;
	pthread_mutex_unlock(&fp->mutex);
}


void
mutex_rele(struct foo *fp)			/*        ,      */
{
	pthread_mutex_lock(&fp->mutex);		/*        lock unlock           */
	if(--fp->count==0){
		pthread_mutex_destroy(&fp->mutex);
		free(fp);
	}else {
		pthread_mutex_unlock(&fp->mutex);
	}
}

  :         pthread_mutex_lock pthread_mutex_unlock          。
                  ,                         。

    :《UNIX      》   。