gpt4 book ai didi

c - 线程同步-写入者优先级锁

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

所以,我在 unix 系统上使用 C,并且可以访问 pthreads 和 semaphore.h 库。

这是问题(我相信这可以归结为“写入者优先级读写锁”问题):

为了简单起见,我有两个线程可以运行的不同进程:A 和 B。

B 比 A 更重要,因此如果有 B 等待运行,我不希望更多的 A 进程开始执行,直到所有 B 进程都运行完毕。此外,虽然多个 A 进程可以同时运行,但一次只能执行 1 个 B 进程。

我目前执行此操作的方法(我认为这要么是错误的,要么效率低下,要么两者兼而有之)是让 B 进程在其整个执行时间内都需要锁定,而 A 进程将在以下时间获取并立即释放锁定:他们的执行的开始。我还在这里使用信号量来实现多读取器/单写入器功能。

由于各种原因,pthread_rwlock 功能在此系统上不可用,因此解决方案不能涉及它们。

最佳答案

如果 A 要立即释放锁,但继续使用您想要锁定的任何资源,那么您为什么还要费心锁定呢?

你说:-多个A可以同时运行- 一次只能运行一个B

我假设(但如果我错了请纠正我):-B和A不能同时运行

如果您立即释放 A 的锁,那么将允许 B 同时运行。我在这里遗漏了什么吗?

解决办法:

有一种为线程获取资源的机制。该机制仅在第一个 A 线程启动时对资源加锁一次,并仅在所有 A 线程都消失时释放它。

有一个取消标记供 A 线程使用,当 B 线程开始时,该标记设置为 true,然后当所有 A 线程退出时,B 线程就可以开始。

B线程明显锁住了,直到完成才释放。

不要忘记在 A 线程中足够频繁地检查取消标记,以便在询问时退出不会花费太长时间。

关于c - 线程同步-写入者优先级锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8115568/

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