gpt4 book ai didi

c - 以只读模式线程锁定结构(C11 stdatomic)

转载 作者:行者123 更新时间:2023-11-30 14:51:43 26 4
gpt4 key购买 nike

我用 stdatomic 创建了一个类似互斥锁的锁定函数,基本上可以做到这一点

do atomic_store(&zero, 0);
while (!atomic_compare_exchange_weak(&mystructure->address, &zero, threadlocal_address));
atomic_fetch_add(&structure->locklevel, 1);

还有另一个解锁函数,它会递减锁定级别并将地址设置回零,仅当锁定级别==0时(这允许在调用调用另一个锁定的函数之前进行锁定,从而使其仍保持锁定状态)

这对于 RW 锁定效果很好,但我也想制作一个 R 锁函数(结构可以由多个函数读取,但尝试写入它[调用 RW 锁] 会将其置于等待状态)并且我尝试简单地使用公共(public)地址而不是线程本地地址。

这种方法的问题是,如果许多线程在循环中调用 R-lock,它会导致 RW 操作匮乏(因为锁级别永远不会[或几乎不会]达到零)...有什么想法吗?

最佳答案

您可以尝试使用优先级进行读写操作。我假设您的系统中的读写比率较低。为读写请求实现一个基本队列,当队列中有读写请求等待时,阻止读取请求获取锁。当前读请求完成后,获取 rw 的锁并等待其完成。所以只要有rw请求在队列中等待或者当前正在运行,就阻塞读请求。当 rw 线程解锁并且队列中不再有 rw 请求等待时,允许读请求获取锁。

您可能还需要使用条件变量并根据您的实现向它们发出信号。

关于c - 以只读模式线程锁定结构(C11 stdatomic),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48065769/

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