如果有两个线程访问全局变量,那么许多教程都说使变量volatile变为阻止编译器将变量缓存在寄存器中,从而无法正确更新.但是,访问共享变量的两个线程是通过互斥锁来调用保护的东西不是吗?但是在这种情况下,在线程锁定和释放互斥锁之间,代码处于一个关键部分,只有那个线程可以访问变量,在这种情况下变量不需要是volatile?
那么多线程程序中volatile的用途/目的是什么?
测试该函数的正确方法是什么,不返回或返回NaN.考虑:
require('assert');
var functionUnderTest = function() {
return NaN;
}
// mocha test for above function
describe('Function returning NaN', function() {
it('shall return NaN', function() {
assert.equal(functionUnderTest(), NaN); // AssertionError: NaN == NaN
assert.notEqual(functionUnderTest(), NaN); // No AssertionError
});
});Run Code Online (Sandbox Code Playgroud)
我特别想测试该函数不返回NaN.我知道IEEE754指定类型NaN ==="数字"并且它不等于它自己(或任何其他数字)并且Javascript实现了浮点数,就像IEEE754定义它们一样.
但是如何测试该函数会返回还是不返回NaN?