我对此不确定。
使用int []数组。
如果在我的应用程序中,线程A在线程B写入同一数组元素的同时进行读取,那么一切都会成立吗?
我宁愿在读取时也没有同步块-这是在Web服务中使用的,因此我将无法并行服务多个客户端。
谢谢。
奥利维尔
最佳答案
不,您需要使用锁块来确保在其他进程向其写入数据时,没有人试图读取该数组。否则,您可能会遇到问题。
在C#中,这实际上非常简单,您可以执行以下操作:
// declare an object to use for locking
Object lockObj = new Object();
// declare the array
int[] x = new int[5];
// set the array value (thread safe operation)
public void SetArrayVal(int ndx, int val)
{
if (ndx < 0 || ndx >= x.Length)
{
throw new ArgumentException("ndx was out of range", ndx);
}
lock (lockObj )
{
x[ndx] = val;
}
}
// get the array value (thread safe operation)
public int GetVal(int ndx)
{
if (ndx < 0 || ndx >= x.Length)
{
throw new ArgumentException("ndx was out of range", ndx);
}
lock (lockObj )
{
return x[ndx];
}
}
我不会为确保性能正确而在此担心太多,这很关键。
关于c# - 将数组与多个读取器线程和写入器一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3458519/