- 论坛徽章:
- 0
|
现有一个变量a,一个线程W偶尔需要修改它的值,n个线程需要读取a。需要同时满足以下条件
1. W修改a时,其它线程不能读取a;当有线程读取a时,W不能修改a;当W没有修改a时,其它线程可同时读取a。
2. 一些线程需要监视a是否大于某个值THRESHOLD,如超过了,需要相应执行一些特定操作。
为实现1,我设置了一个pthread_rwlock_t lock。为实现2,我打算设置一个pthread_cond_t cr。code如下
#include <pthread.h>
int a;
pthread_rwlock_t lock = PTHREAD_RWLOCK_INITIALIZER;
pthread_cond_t cv = PTHREAD_COND_INITIALIZER;
int read (){
int v;
pthread_rwlock_rdlock( &lock);
v =a ;
pthread_rwlock_unlock( &lock);
return v;
}
int write (c){
pthread_rwlock_wrlock( &lock);
a =c ;
pthread_rwlock_unlock( &lock);
pthread_cond_broadcast( &cv);
return 0;
}
void monitor () {
pthread_rwlock_rdlock( &lock);
while(a <= THRESHOLD)
pthread_cond_wait(&cv, &lock);
pthread_rwlock_unlock( &lock);
// 执行相关的操作
return 0;
}
在上面的code中,由于pthread_cond_wait似乎只接收mutex而非wrlock,所以monitor函数编译无法通过。是不是需要再设置一个mutex值啊?但设置这个mutex值好像比较麻烦,也不知道怎么设。大侠们有没什么好的办法啊? 多谢。
}
[ 本帖最后由 yacare 于 2007-7-17 12:18 编辑 ] |
|