gpt4 book ai didi

c# - 我应该在以下情况下使用锁吗

转载 作者:行者123 更新时间:2023-11-30 13:41:04 30 4
gpt4 key购买 nike

我设计了一个 Stack 包装器类。我的困惑是,我是否应该在将对象弹出或推送到堆栈变量“ParameterStack”时使用 lock。请让我知道,这个类是否是线程安全的。

public static class StackManager
{
private static Stack ParameterStack = new Stack();

public static T Pop<T>()
{
T RawObject;
T Result = default(T);

lock (ParameterStack)
{
RawObject = (T)ParameterStack.Pop();
}

if (RawObject != null && RawObject is T)
Result = (T)RawObject;

return (T)Result;
}

public static void Push<T>(T Data)
{
lock (ParameterStack)
{
ParameterStack.Push(Data);
}
}
}

我出于学习目的创建了这个 StackManager 类。

最佳答案

看起来不错。有一个(相当理论上的)论点认为锁定 ParameterStack 本身并不完全安全,因为您不拥有代码。假设 Stack 中的某处执行了 lock(this) ,您可能会死锁。

public static class StackManager
{
private static Stack parameterStack = new Stack();
private static object stackLock = new object();

// now use lock(stackLock) instead of lock(ParameterStack)

}

关于c# - 我应该在以下情况下使用锁吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6007066/

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