Я осуществляю синхронизацию кэша веб-прокси-сервера.Существует два случая:
- Если кэш изменяется, он не может быть изменен другими потоками
- Если кэш читается, он не может быть изменендругие потоки, но могут быть прочитаны другими потоками.
Я хочу сделать кэш читаемым, даже если он читается другими потоками.
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();
}
Это мойпростой кодТем не менее, это кажется неудобным и также не поточно-ориентированным.Как я могу реализовать эту синхронизацию?