gpt4 book ai didi

c - 如何交换指针然后释放旧指针,如 RCU

转载 作者:行者123 更新时间:2023-11-30 21:12:03 24 4
gpt4 key购买 nike

我有许多读取器线程读取缓存数据,例如

struct {
hash_table *cache;
int64_t version;
} ctx;

许多读取器线程读取缓存,例如

void *get_from_cache(void *key)
{
/* Maybe access invalid address when writer thread free it too quickly ! */
/* I can use setjmp/longjmp to deal the exception, but it's too expensive ! */
/* On Windows, I can use SEH, but how about Linux ? */

/* Finally, can I avoid it with zero cost on reader thread ? */

return cache.get(key);
}

只有一个写入器线程更新缓存:

void update_cache()
{
int64_t new_version = get_current_version();

if (new_version > ctx.version) {
hash_table *new_cache = load_cache();
hash_table *old_cache = ctx.cache;

ctx.version = new_version;
ctx.cache = new_cache;

/* How to determine the wait time is enough ? */
/* Just use a experiential value ? */
wait_some_time();

free_hash_table(old_cache);
}
}

感谢您的帮助。

最佳答案

从标题来看,您似乎试图依赖指针操作的原子性质。请看一下Is changing a pointer considered an atomic action in C? .

另外 - 尝试检测无效的内存访问确实很糟糕。如果您得到一个指向有效但不正确的地址的指针怎么办?

我会采用更传统的同步机制。

关于c - 如何交换指针然后释放旧指针,如 RCU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182837/

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