如何在 Javascript 中将 `ArrayBuffer` 转换为 `SharedArrayBuffer`?

How to cast an `ArrayBuffer` to a `SharedArrayBuffer` in Javascript?

采用以下代码段:

const arr = [1.1, 2.2, 3.3]
const arrBuffer = (Float32Array.from(arr)).buffer

如何施放这个ArrayBuffer to a SharedArrayBuffer

const sharedArrBuffer = ...?

请注意,ArrayBufferSharedArrayBuffer 都是支持数据指针,您只能通过类型化数组(例如您的示例中的 Float32Array)与之交互。 Array Buffers 表示内存分配,不能 "cast"(只能用类型化数组表示)。

如果您已经一个类型数组,并且需要将其复制到一个新的 SharedArrayBuffer 中,您可以使用 set:

// Create a shared float array big enough for 256 floats
let sharedFloats = new Float32Array(new SharedArrayBuffer(1024));

// Copy floats from existing array into this buffer
// existingArray can be a typed array or plain javascript array
sharedFloats.set(existingArray, 0);

(通常,您可以拥有一个数组缓冲区并通过多个 "typed lenses" 与其进行交互 - 因此,基本上,将数组缓冲区转换为不同的类型,例如 Float32 和 Uint8。但是您不能将 ArrayBuffer 转换为 SharedArrayBuffer,您需要复制其内容。)