我对此不确定。

使用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/

10-11 19:29