ArrayPool<T>.Rent(Int32) 方法是线程安全的吗?

12

我刚刚了解到ArrayPool的存在,但它的文档有些缺失。

我想知道Rent(.)Return(.)是否线程安全。

编辑:看起来我没有注意到文档中“线程安全”部分;但阅读了一些评论和答案后,我松了一口气,因为我不是唯一一个没有注意到这一点的人。

2个回答

11

来自ta.speot.is的更新评论:

线程安全中,它明确指出这个类是线程安全的。所有成员都可以被多个线程同时使用。

原始内容:

尽管在learn.microsoft.com上没有说明,但有几个参考说明了它是线程安全的。

为资源池添加一个新的System.Buffers名称空间

该池将是轻量级和线程安全的,允许在进程内的任何线程中快速租用和归还调用,同时具有最小的锁定开销,并且大多数租用调用不会在堆上分配内存(在Rent函数的描述中将解释以下例外情况)。

使用ArrayPool池化大型数组

推荐使用ArrayPool.Shared属性,返回一个共享的池实例。它是线程安全的,你需要记住的是它有一个默认的最大数组长度,等于2^20(1024 * 1024 = 1,048,576)。

.


2
它在learn.microsoft.com上没有说明,但在https://learn.microsoft.com/en-us/dotnet/api/system.buffers.arraypool-1上确实写着:“此类是线程安全的。所有成员都可以被多个线程同时使用。” - ta.speot.is
@ta.speot.is 哦,原来是这样 - TheGeneral

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接