gpt4 book ai didi

c - 如果我是一线程写多读,怎么只写锁不读锁呢?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:08:10 25 4
gpt4 key购买 nike

所以我在写的缓存中有这个结构:

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 个读取等待时写入才能访问

大多数实现都处于偏向写入或读取的中间位置。

对于标准 POSIX 实现,请参阅:pthread_rwlock_t http://pubs.opengroup.org/onlinepubs/007908799/xsh/pthread_rwlock_init.html

关于c - 如果我是一线程写多读,怎么只写锁不读锁呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33945837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com