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 》 。