假设您将数组作为参数传递给给定方法,例如
public static DoSomething (string[] array)
{
// Do something with array here.
}
并且在方法内部使用一些指令,如果array
包含无效数据,则会引发异常。在多线程环境中,多个线程可能正在访问array
,您应按什么顺序进行操作?
1)锁定阵列以确保同时只有一个线程对其进行操作,并在锁定后验证它,一旦完成工作就释放锁定;或
2)立即检查阵列的有效性,如果有效,请将其锁定并开始工作。
答案 0 :(得分:5)
如果为“null”,则无法锁定“数组”;但无论如何无关紧要< - > - 参考不能改变;即使内容发生变化,它仍然是相同的参考。因此,您可以推迟锁定,直到您对内容感兴趣。
所以:
如果您的意思是一般有效性 - 这取决于是否有任何线程会更改内容。如果不是......嗯,不需要锁。如果他们 更改内容,则需要在验证之前锁定,否则您的验证没有实际意义。
答案 1 :(得分:2)
我相信方法中的代码不需要锁定作为参数传递的项。相反,来电者应该这样做!!
这是责任链的问题:访问共享数据的对象(即类中的静态字段)应该进行空检查和锁定,并且应该对其输入进行操作的方法不应该考虑任何多线程问题,假设该参数仅由它使用。
这只是我的意见,所以