所以我把这个结构放到了一个缓存我写的:
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);
我想使用互斥锁,以便在我写作时不允许任何读取,但没有读取阻止其他读取。因此读取线程不会相互阻塞,但如果添加一个,它将阻止其他写入和读取。
我研究了互斥体,但我无法理解如何实现这一权利。我想我可以锁定写入,但是如果读取的大小比实际大或小,那么在读取或读取过程中,都会导致双缓存或内存损坏问题。
答案 0 :(得分:3)
你想要的是一个读写锁。根据它们偏向的方式,有不同的实现方式。
两个极端的边界是:
大多数实现都偏向于写入或读取。
对于标准POSIX实施,请参阅:pthread_rwlock_t
http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_init.html