gpt4 book ai didi

c# - 锁定两种方法并确保只有在线程上调用一种方法

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:32 25 4
gpt4 key购买 nike

在一个类中我有两种方法:

  • 方法 1():无效
  • 方法 2():无效

这个类可以被多线程访问。我怎么能意识到,如果“thread1”调用“Method1”,那么“thread2”正在等待“Method2”或“Method1”。如果“thread2”正在调用“Method2”,则此逻辑也应该有效,则“thread1”正在等待“Method1”或“Method2”

我的想法是这样的:

private object _lock = new object();

void Method1() {
lock(_lock){
//TODO: do something
}
}

void Method2() {
lock(_lock){
//TODO: do something
}
}

这行得通吗?

最佳答案

您的代码将在您在评论中澄清后正常工作。

使用给定的代码,您将:

  1. 确保只有一个线程可以同时执行 either Method1Method2
    1. 如果一个线程在 Method1 中,其他线程在尝试调用 Method1Method2 时将等待。
  2. 如果 Method1 调用 Method2,反之亦然,这也会起作用,因为同一个线程可以多次锁定同一个对象。

    换句话说,这不是死锁:

    lock (x)
    lock (x)
    ....

因此您的代码应该可以正常工作。

关于c# - 锁定两种方法并确保只有在线程上调用一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39992493/

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