gpt4 book ai didi

c# - Array.Resize(..) 是线程安全的吗?

转载 作者:太空狗 更新时间:2023-10-29 23:14:52 24 4
gpt4 key购买 nike

是否在用作 SAEA 线程安全缓冲区的数组上调用 Array.Resize?不同的线程都写入他们自己分配的数组部分,我只想在初始化大小随着连接用户的增加而用完后不锁定地扩大数组。

byte[] buffer; //Accessed
object expand_Lock = new object();

public void AsyncAccept()
{
//Lock here so we don't resize the buffer twice at once
lock(expand_Lock)
{
if (bufferFull)
{
Array.Resize(buffer, buffer.Length + 2048 * 100); //Add space for 100 more args
//Is Array.Resize threadsafe if buffer can be read/wrote to at anytime?
AssignMoreSAEA(2048, 100); //irrelevant to question what this does
}
}
}

最佳答案

不,Array.Resize 不是线程安全的。正在调整大小的数组可能必须在内存中四处移动,并且调整大小的数组甚至不会与传入的数组相同。

这意味着一个线程可能正在写入原始数组,而 Array.Resize 正在创建新数组并复制项目 - 复制操作不 protected 。这可能会导致数据丢失。

关于c# - Array.Resize(..) 是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com