这个问题不是关于竞争条件,原子性,或者为什么要在代码中使用锁.我已经知道了.
更新:我的问题不是"存在易失性存储器的奇怪现象"(我知道它确实存在),我的问题是"没有.NET运行时抽象,所以你永远不会看到它".
请参阅http://www.yoda.arachsys.com/csharp/threads/volatility.shtml 和关于字符串属性本身线程安全的第一个答案吗?
(它们实际上是同一篇文章,因为一个引用另一个.)一个线程设置bool而另一个线程循环永远读取bool - 那些文章声称读取线程可能缓存旧值并且从不读取新值,所以因此你需要一个锁(或使用volatile关键字).他们声称以下代码可能永远循环.现在我同意锁定变量是一种好习惯,但我无法相信.NET运行时会真正忽略内存值的变化,如文章所述.我理解他们关于易失性内存与非易失性内存的讨论,我同意他们在非托管中有一个有效的观点代码,但我无法相信.NET运行时将无法正确地抽象出来,以便下面的代码能够满足您的期望.这篇文章甚至承认代码"几乎可以肯定"有效(虽然不能保证),所以我就索赔要求BS.任何人都可以验证以下代码是否真的有效?是否有人能够得到一个案例(也许你不能总是重现它)这个失败的地方?
class BackgroundTaskDemo
{
private bool stopping = false;
static void Main()
{
BackgroundTaskDemo demo = new BackgroundTaskDemo();
new Thread(demo.DoWork).Start();
Thread.Sleep(5000);
demo.stopping = true;
}
static void DoWork()
{
while (!stopping)
{
// Do something here
}
}
}
Run Code Online (Sandbox Code Playgroud) 我想以可重复的方式对结果进行随机排序,以实现分页等目的.对于这个NEWID()太随机,因为无法重新获得相同的结果.兰德(种子)的排序将是理想的,因为相同的种子会产生相同的随机集合.不幸的是,Rand()状态会重置每一行,有没有人有解决方案?
declare @seed as int;
set @seed = 1000;
create table temp (
id int,
date datetime)
insert into temp (id, date) values (1,'20090119')
insert into temp (id, date) values (2,'20090118')
insert into temp (id, date) values (3,'20090117')
insert into temp (id, date) values (4,'20090116')
insert into temp (id, date) values (5,'20090115')
insert into temp (id, date) values (6,'20090114')
-- re-seeds for every item
select *, RAND(), RAND(id+@seed) as r from temp order by r
--1 2009-01-19 00:00:00.000 0.277720118060575 0.732224964471124 …Run Code Online (Sandbox Code Playgroud) 我想知道SVN在Commits期间是否实际压缩了服务器上的二进制内容?我知道二进制文件存储用于比较和版本控制的差异但是想知道提交的新文件是否会占用服务器上与客户端PC上相同的卷?
在Python解释器中的这些指令之后,获得一个带有绘图的窗口:
from matplotlib.pyplot import *
plot([1,2,3])
show()
# other code
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不知道如何继续以交互方式探索show()在程序进行进一步计算时创建的图形.
有可能吗?有时计算很长,如果他们在检查中间结果期间继续进行计算会有所帮助.
你有一个有2个参数的类的方法,其中一个是文件路径,另一个是不相关的.
InterestingResult result = foo.Bar(irrelevant, filePathInfo);
Run Code Online (Sandbox Code Playgroud)
本着快速快速单元测试的精神,你发现自己正在考虑重构这个方法来拉出文件路径来删除这个测试的IO要求......最有可能把它放到另一个方法中,所以现在你可以调用
string dataInFile = foo.GetDataInFile(filePathInfo);
InterestingResult result = foo.Bar(irrelevant, dataInFile);
Run Code Online (Sandbox Code Playgroud)
你疯了吗?......或者这是件好事吗?
我有一个asp:菜单,它包含一个指向http://www.example.com/one.aspx的顶级菜单项.当您将鼠标悬停在顶级菜单项上时,它会显示一个下拉列表,其中一个选项是One,它指向http://www.example.com/one.aspx.显然,我不能这样做,所以我一直在做?在第二个网址的末尾绕过这个.我很好奇是否有两个url指向asp:Menu中的相同位置?
使用ASP.NET MVC Preview 5(尽管已经尝试使用Beta),路由中的查询字符串默认值会覆盖查询字符串中传递的值.一个repro就是写一个像这样的控制器:
public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
Run Code Online (Sandbox Code Playgroud)
路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo", x = 1 });
Run Code Online (Sandbox Code Playgroud)
然后使用这个相对URI调用它:
/Test/Foo?x=5
Run Code Online (Sandbox Code Playgroud)
我看到的跟踪输出是:
1
5
Run Code Online (Sandbox Code Playgroud)
换句话说,为路径设置的默认值总是传递给方法,而不管它是否实际上是在查询字符串上提供的.请注意,如果删除了查询字符串的默认值,即路由映射如下:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo" });
Run Code Online (Sandbox Code Playgroud)
然后控制器按预期运行,并将值作为参数值传入,给出跟踪输出:
5
5
Run Code Online (Sandbox Code Playgroud)
这对我来说就像一个bug,但我会发现非常令人惊讶的是,像这样的bug仍然可以在ASP.NET MVC框架的测试版中,因为带有默认值的查询字符串并不完全是一个深奥或边缘的功能,所以这几乎肯定是我的错.我有什么想法我做错了吗?
我在zend代码上重新分解php,所有的代码都充满了$_GET["this"]和$_POST["that"].我一直使用的更phpish $this->_request->getPost('this')和$this->_request->getQuery('that')(这一个是没有这么多getGet的getquery insteado逻辑).
所以我想知道我的方法是否更安全/更好/更容易保持.我在Zend Framework文档中读到,您必须验证自己的输入,因为请求对象不会这样做.
这让我有两个问题:
谢谢!
正如问题所述,我主要想知道我的代码是否在模拟器中运行,但也有兴趣了解正在运行或正在模拟的特定iphone版本.
编辑:我在问题名称中添加了"以编程方式"这个词.我的问题是能够动态地包含/排除代码,具体取决于正在运行的版本/模拟器,所以我真的在寻找类似于预处理器指令的东西,它可以为我提供这些信息.
c# ×3
asp.net ×1
asp.net-mvc ×1
aspmenu ×1
compression ×1
get ×1
input ×1
ios ×1
matplotlib ×1
objective-c ×1
paging ×1
php ×1
plot ×1
post ×1
python ×1
query-string ×1
random ×1
refactoring ×1
routing ×1
sql ×1
sql-server ×1
svn ×1
swift ×1
t-sql ×1
unit-testing ×1
watin ×1
xcode ×1