我一直认为,ConcurrentHashMap类似的类(维护同步更新,不同步读取)做了一个非常有用和直观的事情:它们没有锁定读取并锁定更新的所有功能.像这样的策略确保所有事情保持一致.
但是我仔细阅读了文档,并打开了实现ConcurrentHashMap,并且正如我现在所理解的那样,当另一个线程正在执行更新时,它不会阻止读取.如果一个线程开始执行putAll(hugeCollection)而另一个线程同时重复contains(theSameObjectForAllCalls),那么第二个线程可能会在putAll仍在工作时得到不同的结果.
以下是文档中的相关部分:
对于诸如putAll和clear之类的聚合操作,并发检索可能反映仅插入或删除某些条目.
另一个有趣的事情是:
检索反映了最近完成的更新操作的结果.
这不是由于某些锁定,而是因为首先添加了一个新对象,并且只有在该对象计数器递增并且该对象对于读取操作变得可见之后.
那么,锁定更新的重点是什么?
我有一个与onChange事件相关联的 Javascript 函数。我知道有些浏览器支持onPaste文档或元素级别。有没有办法确定onChange事件是否是由“粘贴”引起的 - 我尝试添加一个在onPaste触发时设置的全局变量,然后在我的onChange例程结束时重置它,但不能保证该onPaste函数得到之前调用onChange。
这是代码:
class LongOp
{
//The delegate
Action longOpDelegate = LongOp.DoLongOp;
//The result
string longOpResult = null;
//The Main Method
public string CallLongOp()
{
//Call the asynchronous operation
IAsyncResult result = longOpDelegate.BeginInvoke(Callback, null);
//Wait for it to complete
result.AsyncWaitHandle.WaitOne();
//return result saved in Callback
return longOpResult;
}
//The long operation
static void DoLongOp()
{
Thread.Sleep(5000);
}
//The Callback
void Callback(IAsyncResult result)
{
longOpResult = "Completed";
this.longOpDelegate.EndInvoke(result);
}
}
Run Code Online (Sandbox Code Playgroud)
以下是测试用例:
[TestMethod]
public void TestBeginInvoke()
{
var longOp = new LongOp();
var result …Run Code Online (Sandbox Code Playgroud) 这是我用来生成随机盐的函数:
function generateRandomString($nbLetters){
$randString="";
$charUniverse="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
for($i=0; $i<$nbLetters; $i++){
$randInt=rand(0,61);
$randChar=$charUniverse[$randInt];
$randString=$randomString.$randChar;
}
return $randomString;
}
Run Code Online (Sandbox Code Playgroud)
这是针对非商业网站的.它仅用于生成salt(存储在db中并与用户提交的pw一起用于散列).
这个合适吗?我应该使用更大的字符子集,如果是这样,在PHP中有一个简单的方法吗?
我知道可以在Mercurial中关闭一个命名分支,这样它就不会出现在hg branches列表中:
hg commit --close-branch -m 'close badbranch, this approach never worked'
Run Code Online (Sandbox Code Playgroud)
如果需要,以后可以重新打开分支吗?
我有两个描述任意旋转的旋转矩阵.(4x4 opengl兼容)
现在我想在它们之间进行插值,以便它遵循从一个旋转到另一个旋转的径向路径.想到三脚架上的相机看起来然后旋转.
如果我插入每个组件我得到一个压缩结果,所以我认为我只需要插入矩阵的某些组件.但是哪一个?
c# ×4
.net ×2
3d ×1
concurrency ×1
dom-events ×1
java ×1
javascript ×1
locking ×1
matrix ×1
mercurial ×1
onchange ×1
onpaste ×1
performance ×1
php ×1
rotation ×1
salt ×1
security ×1
xml ×1
xslt ×1