所以我把这个结构放到了我正在写的缓存中:

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_thttp://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_init.html

关于c - 如果我有一个线程在写并且有很多在读,那么我怎样才能只在写时锁定,而没有在读时锁定?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33945837/

10-09 13:41