我希望能帮助理解一个概念.对于不当使用术语,我深表歉意.我是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()访问?
感谢您的时间和耐心.