我正在实现Web代理服务器缓存的同步。有两种情况:
我想让缓存可读,即使它被其他线程读取。
int readflag = 0;
// read
void read()
{
pthread_mutex_lock();
pthread_mutex_unlock();
++readflag;
/* read the cache*/
--readflag;
}
// modify
void write()
{
while(readflag > 0);
pthread_mutex_lock();
/* modify the cache*/
pthread_mutex_unlock();
}
这是我的简单代码。但是,它似乎很尴尬,也不是线程安全的。 如何实现此同步?
答案 0 :(得分:0)
Pthreads为此提供了读写锁。
使用pthreads读写锁的示例:
#include <pthread.h>
#include <assert.h>
static pthread_rwlock_t rwlock = PTHREAD_RWLOCK_INITIALIZER;
static void read()
{
int r;
r=pthread_rwlock_rdlock(&rwlock);
assert(0==r);
//lock/unlock ops can't fail
//unless your program's logic is flawed
/* read the cache*/
r=pthread_rwlock_unlock(&rwlock); assert(0==r);
}
// modify
static void write()
{
int r;
r=pthread_rwlock_wrlock(&rwlock); assert(0==r);
/* modify the cache*/
r=pthread_rwlock_unlock(&rwlock); assert(0==r);
}