小编Tim*_*Tim的帖子

线程和锁定资源

我希望能帮助理解一个概念.对于不当使用术语,我深表歉意.我是OOP的新手,所以请耐心等待我.

这是一些显示问题的伪代码:

public MyClass
{
    myClass singleton; //singleton object of myClass (only one instance created)
    myCollection; //list or array
    private object _lock;

    public myFunction()
    {
        lock(myCollection) //or do I use lock(_lock)?
        {
            try
            {
                //modifies my collection
            }
            catch
            {
                //exception
            }
        }
    }

    public secondFunction()
    {
        //modify my collection
    }

    public getMyCollection()
    {
        return myCollection;
    }

}
Run Code Online (Sandbox Code Playgroud)

现在让我们假设我们在classA和classB(我将调用这些对象objA和objB)的不同线程上有两个对象,它们正在尝试访问MyClass.

1)如果objA正在使用myFunction,我理解objB由于锁定而无法同时使用myFunction.

但是,objB可以使用secondFunction()吗?或者myFunction()上的锁是否保护myCollection不会被修改,直到锁被释放?

如果上述问题为真:如果objA正在使用myFunction(),并且objB正在尝试使用secondFunction(),那么objB线程是否会等到锁被释放?

2)什么是更好的惯例?锁定(_lock)或锁定(myCollection)

3)如果我在myfunction()中使用lock(_lock),它是否仍会保护myCollection不被secondFunction()访​​问?

感谢您的时间和耐心.

c# multithreading locking

1
推荐指数
1
解决办法
266
查看次数

标签 统计

c# ×1

locking ×1

multithreading ×1