小编has*_*hid的帖子

为什么像fetch-and-add这样的原子操作会返回被更改的变量的旧值?

我正在努力学习并更好地理解多线程,但我对原子函数(如fetch-and-add)的行为感到困惑.在fetch-and-add的特定情况下,我理解一个值(假设当前等于5的x)被一个增量值(假设为3)加到,结果sum(8)被写入x的放在内存中,但返回旧的值(5).

在不同的地方还有其他几个这样的函数(比如OpenGL的原子函数,Java的AtomicIntegers,还有更多的区域)就像这样.但我不明白的是为什么代码中的一个地方想要写入内存但仍然首先返回它想要修改的值.任何人都可以帮助阐明这一点吗?

java opengl multithreading atomic atomicity

8
推荐指数
2
解决办法
1242
查看次数

JavaScript Web Audio:无法正确解码音频数据?

我正在尝试使用JavaScript中的Web Audio API将声音加载到缓冲区并播放它.不幸的是它不起作用,我收到以下错误:

Uncaught TypeError: Failed to set the 'buffer' property on 'AudioBufferSourceNode':
The provided value is not of type 'AudioBuffer'.
Run Code Online (Sandbox Code Playgroud)

我可以确定哪条线给了我错误,但我不知道为什么.以下是相关代码,如果它有帮助:

var audioContext;
var playSoundBuffer;

function init() {
    window.AudioContext = window.AudioContext || window.webkitAudioContext;
    audioContext = new AudioContext();

    loadNote();
}

function loadNote() {
    var request = new XMLHttpRequest();
    request.open("GET", "./sounds/topE.wav", true);
    request.responseType = "arraybuffer";
    request.onload = function() {
        audioContext.decodeAudioData(request.response, function(buffer) {
            playSoundBuffer = buffer;
        }, function(error) {
            console.error("decodeAudioData error", error);
        });
    };
    request.send();

    playSound();
}

function playSound() {
    var source …
Run Code Online (Sandbox Code Playgroud)

javascript html5 web-audio-api

1
推荐指数
1
解决办法
1万
查看次数