使用二个互斥量的多线程程序.docVIP

  • 5
  • 0
  • 约4.39千字
  • 约 6页
  • 2017-03-14 发布于重庆
  • 举报
使用二个互斥量的多线程程序

#include#include #include #include #include #define HASH id id % NHASH #define THREAD_NUM 5 #define FOO_NUM 10 #define NHASH 29 struct foo *fh[NHASH]; pthread_mutex_t hashlock PTHREAD_MUTEX_INITIALIZER; struct foo int f_count; pthread_mutex_t f_lock; struct foo *f_next; int f_id; int visited[THREAD_NUM]; int vnum; ; struct foo* foo_alloc int fid struct foo *fp; int i, 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 fid ; pthread_mutex_lock hashlock ; fp- f_next fh[idx]; fh[idx] fp; pthread_mutex_lock fp- f_lock ; pthread_mutex_unlock hashlock ; for i 0; i THREAD_NUM; i++ fp- visited[i] -1; pthread_mutex_unlock fp- f_lock ; return fp; void foo_hold int tid, struct foo *fp pthread_mutex_lock fp- f_lock ; fp- f_count++; fp- visited[fp- vnum++] tid; pthread_mutex_unlock fp- f_lock ; struct foo * foo_find int tid, int foo_id struct foo *fp; int idx; idx HASH foo_id ; pthread_mutex_lock hashlock ; for fp fh[idx];fp! NULL;fp fp- f_next if fp- f_id foo_id foo_hold tid, fp ; break; pthread_mutex_unlock hashlock ; return fp; void foo_rele int fid, struct foo *fp struct foo *tfp; int idx; pthread_mutex_lock fp- f_lock ; if fp- f_count 1 pthread_mutex_unlock fp- f_lock ; pthread_mutex_lock hashlock ; pthread_mutex_lock fp- f_lock ; if fp- f_count! 1 fp- f_count--; pthread_mutex_unlock fp- f_lock ; pthread_mutex_unlock hashlock ; return; idx HASH fid ; tfp fh[idx]; if tfp fp fh[idx] fp- f_next; else while tfp- f_next! fp tfp tfp- f_next; tfp- f_next fp- f_next; pthread_mutex_unlock hashlock ; pthread_mutex_unlock fp- f_lock ; pthread_mutex_destroy fp- f_lock ; free fp ; else fp- f_count--; pthread_mutex_unlock fp- f_lock ; void* thrd_func_0 void *arg int tid int arg; int i,j,foo_id; i j foo_id 0; struct foo *fp NULL; for i 0; i THREAD_NUM;i++ for j 0; j FOO_NUM; j++ foo_id j + i * FOO_NUM; fp foo_find tid, foo_id ; if NULL

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档