gpt4 book ai didi

java - 在这种情况下,ArrayList 是否会导致竞争条件或死锁?

转载 作者:行者123 更新时间:2023-12-01 23:31:07 24 4
gpt4 key购买 nike

我最近完成了一个操作系统类(class)的项目,但在该项目的一个特定部分,我想知道我是否做出了最佳决定。在这个项目中,我们需要设计一个PID管理器。

PID 管理器的目的是在进程首次创建时为其分配唯一的进程标识符 (PID)。当进程完成执行时,PID 将返回到 PID 管理器,以便可以将相同的 PID 重新分配给以后的进程。不能为两个进程分配相同的 PID。

以下是我们需要实现的接口(interface):

public interface PIDManager
{

public static final int MIN_PID = 4;
public static final int MAX_PID = 127;

public int getPID();
public int getPIDWait();
public void releasePID(int pid);
}

因此 getPID() 只是返回一个唯一的 PID,但如果没有可用的 PID,则返回 -1。 getPIDWait() 返回一个唯一的 PID,但会阻塞调用进程,直到 PID 可用为止。 releasePID() 释放 PID,以便其他需要使用它的进程可以使用它。

我们需要某种类型的数据结构来跟踪分配的 PID。问题描述表明该数据结构需要没有竞争条件死锁。例如,同一个 PID 可以同时分配给多个进程,这是我们不希望发生的事情。

所以我最近完成了这个项目。我选择使用 ArrayList 来跟踪分配的 PID。我选择 ArrayList 是因为它的大小增长和缩小提供了很多便利,可以轻松地在 ArrayList 中添加或删除 PID,并检查其中是否包含 PID。但现在我不确定 ArrayList 是否会导致竞争条件或死锁。对于这种情况使用 ArrayList 可行吗?如果您愿意,我可以提供我的实现。

最佳答案

如果我正确地解释了您的限制,那么您的 PID 范围是 4-127,因此从性能角度来看,只要您适当锁定,您就可以使用 ArrayList

使用BitSet 可以更有效地利用内存。您仍然需要适当的锁定。

在占用少量内存但性能更好的情况下,您可能会发现其中一个并发集更高效 - 也许是 ConcurrentSkipListSet。这样您就不需要执行任何锁定,因为它本质上是线程安全的。请参阅here相关主题。

关于java - 在这种情况下,ArrayList 是否会导致竞争条件或死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19260409/

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