gpt4 book ai didi

c# - SyncRoot 模式有什么用?

转载 作者:IT王子 更新时间:2023-10-29 03:44:03 25 4
gpt4 key购买 nike

我正在阅读一本介绍 SyncRoot 模式的 C# 书籍。它显示

void doThis()
{
lock(this){ ... }
}

void doThat()
{
lock(this){ ... }
}

并与 SyncRoot 模式进行比较:

object syncRoot = new object();

void doThis()
{
lock(syncRoot ){ ... }
}

void doThat()
{
lock(syncRoot){ ... }
}

但是,我真的不明白这里的区别;似乎在这两种情况下,这两种方法一次只能由一个线程访问。

书上描述...因为实例的对象也可以用于从外部进行同步访问,而你无法控制这个类本身的形式,你可以使用SyncRoot模式嗯? '实例的对象'?

谁能告诉我上述两种方法的区别?

最佳答案

如果您希望防止多个线程同时访问一个内部数据结构,您应该始终确保您锁定的对象不是公共(public)的。

这背后的原因是公共(public)对象可以被任何人锁定,因此您可以创建死锁,因为您不能完全控制锁定模式。

这意味着锁定 this 不是一个选项,因为任何人都可以锁定该对象。同样,你不应该锁定你暴露给外界的东西。

这意味着最好的解决方案是使用内部对象,因此建议只使用 Object

锁定数据结构是您真正需要完全控制的事情,否则您可能会面临设置死锁场景的风险,这可能很难处理。

关于c# - SyncRoot 模式有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/728896/

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