如果我有一个关键部分,我必须实现一个锁定它的方法.我看到了以下变体:
while(lock)
{
//do nothing
}
lock = true;
// code of critical section
lock = false;
Run Code Online (Sandbox Code Playgroud)
但是,我对它持怀疑态度,因为从理论上讲,几个线程可以执行while(lock)
(检查并看到它是假的),并且一起进入临界区,因为while(lock)
并且lock = true;
不是在一个连续的块中执行.我错了吗?或者这确实是一种不安全的方法?
在F#中,有许多不同的集合式语法可以编译成某种东西.它们都是什么,它们是什么意思?
let s1 = [a, b, c, d]
let s2 = [a; b; c; d]
let s3 = (a, b, c, d)
let s4 = (a, b, c, d)
let s5 = [|a, b, c, d|]
let s6 = [|a; b; c; d|]
let s7 = a, b, c, d
let s8 = { aa = 3; bb = 4 }
Run Code Online (Sandbox Code Playgroud) 在代码审查期间我被建议做
bool acquiredLock = false;
try {
Monitor.TryEnter(lockObject, 500, ref acquiredLock);
if (acquiredLock) {
// do something
}
else {
// fallback strategy
}
}
finally
{
if (acquiredLock)
{
Monitor.Exit(lockObject);
}
}
Run Code Online (Sandbox Code Playgroud)
而不是更简单
if (Monitor.TryEnter(lockObject, 500)) {
try {
// do something...
}
finally {
Monitor.Exit(lockObject);
}
} else {
// fallback strategy
}
Run Code Online (Sandbox Code Playgroud)
它有什么不同?第一个代码怎么能没有出现第二个代码会出现错误的错误?
副标题 - 如何在没有中间人攻击的情况下真正安全地连接到 SQL Azure?
我可以使用 TrustServerCertificate=true 的 ADO.net 连接字符串并成功连接到服务器。但是,如果这样做,我将失去对中间人攻击的保护,其中与服务器的通信被劫持,并且使用未知的证书来建立连接。所以我想使用TrustServerCertificate=false。
唯一的问题是,现在我收到连接失败信任验证的错误。我希望解决此问题的方法是我需要在我的证书存储之一中安装 SQL Azure 的服务器证书。问题是我不知道如何获取服务器证书。帮助?