所以我把这个结构放到了我正在写的缓存中:
struct scache {
char* rp;
int ce;
char* code;
struct headers* headers;
struct body* body;
};
struct dcache {
unsigned char md5[16];
struct scache scache;
};
struct cache {
struct scache** scaches;
size_t scache_size;
struct dcache** dcaches;
size_t dcache_size;
};
struct scache* getSCache(struct cache* cache, char* rp, int ce);
struct dcache* getDCache(struct cache* cache, char* rp, int ce, unsigned char* md5);
int addSCache(struct cache* cache, struct scache* scache);
int addDCache(struct cache* cache, struct dcache* dcache);
我想使用互斥锁,这样我在写的时候就不允许任何读操作,但是不允许读阻塞其他读操作。因此,读取线程不会相互阻塞,但如果其中一个线程添加了一个线程,它将阻塞其他的写入和读取。
我研究了互斥锁,但我无法集中精力考虑如何实现这一权利。我想我可以锁定写操作,但是如果read see的大小大于或小于实际大小,那么under read s或over reads都会导致双重缓存或内存损坏。
最佳答案
你想要的是读写锁。有不同的实现方式取决于它们的偏向。
两个边界极端是:
写操作可立即访问
只有在0个读操作正在等待时,写入操作才能获得访问权限
大多数实现都位于中间偏于写或读。
有关标准POSIX实现,请参见:pthread_rwlock_t
http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_init.html
关于c - 如果我有一个线程在写并且有很多在读,那么我怎样才能只在写时锁定,而没有在读时锁定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33945837/