在多CPU机器上运行的多线程程序中,我需要使用易失性读/写来访问共享状态(下面的示例代码中的_data)以确保正确性.
换句话说,可以在cpu上缓存堆对象吗?
使用下面的示例并假设多线程将访问GetValue和Add方法,我需要ThreadA能够添加数据(使用Add方法)和ThreadB能够立即查看/获取添加的数据(使用GetValue方法) ).那么我需要向_data添加易失性读/写以确保这一点吗?基本上我不想添加要在ThreadA的cpu上缓存的数据.
/我不是锁定(强制独占线程访问),因为代码需要超快,我不从_data中删除任何数据,所以我不需要锁定_data.
谢谢.
****更新****************************
显然你们认为使用这个例子无锁是不好的主意.但是我可以在这里面对哪些副作用或例外?
如果1个线程正在迭代read值而另一个线程正在迭代update的值,那么Dictionary类型会抛出异常吗?或者我只会遇到"脏读"(在我的情况下会没问题)?
****结束更新****************************
public sealed class Data
{
private volatile readonly Dictionary<string, double> _data = new Dictionary<string, double>();
public double GetVaule(string key)
{
double value;
if (!_data.TryGetValue(key, out value))
{
throw new ArgumentException(string.Format("Key {0} does not exist.", key));
}
return value;
}
public void Add(string key, double value)
{
_data.Add(key, value);
}
public void Clear()
{
_data.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复.关于锁,这些方法几乎经常被多个线程调用,所以我的问题是有争议的锁而不是实际的锁操作.
所以我的问题是关于cpu缓存,可以将堆对象(_data实例字段)缓存在cpu上吗?我是否需要使用易失性读/写访问_data字段?
/另外,我坚持使用.Net 2.0.
谢谢你的帮助.
我正在尝试使用模型继承时找到django模型对象的实际类.
一些代码来描述问题:
class Base(models.model):
def basemethod(self):
...
class Child_1(Base):
pass
class Child_2(Base):
pass
Run Code Online (Sandbox Code Playgroud)
如果我创建两个Child类的各种对象,并创建一个包含它们的查询集:
Child_1().save()
Child_2().save()
(o1, o2) = Base.objects.all()
Run Code Online (Sandbox Code Playgroud)
我想确定对象在basemethod中是否为Child_1或Child_2类型,我可以通过o1.child_1和o2.child_2访问子对象,但是它会重新获得有关基类中子类的知识.
我想出了以下代码:
def concrete_instance(self):
instance = None
for subclass in self._meta.get_all_related_objects():
acc_name = subclass.get_accessor_name()
try:
instance = self.__getattribute__(acc_name)
return instance
except Exception, e:
pass
Run Code Online (Sandbox Code Playgroud)
但它感觉很脆弱,如果我继承更多级别,我不确定会发生什么.
有没有相当于用PHP编写的Trac?我需要与SVN集成的东西并且是免费的.它应该允许我浏览SVN源,进行某种错误跟踪并显示SVN中的最近更改.维基不是必不可少的.
提前致谢.
正如问题所说,它只是逃避了我的记忆如何在javascript中显示xml,我想在页面上的div中显示一些源xml,它位于另一个div中xml的处理结果旁边.
不记得是否有相当于javascript的转义来转换客户端上的实体
注意:xml文件是从服务器端提供的,因此我需要一个客户端解决方案
注意:主要问题是XML在大多数浏览器中无法正确呈现,所有括号和属性都消失了,留下的文本看起来不像xml
我需要计算目录中的文件数.我可以使用该目录中的所有文件的名称System.IO.Directory.GetFiles()并获取该数组的长度,但在大型目录上需要太长时间.有没有办法获得计数而不必得到名字?
何时将信息保存在XML文件中以及在自己的格式文件中时最好?
对于XML(或其他标准),我看到:
对于自己格式的文件,我看到:
有没有办法从Javascript代码中检测元素的真实边框,填充和边距?如果您查看以下代码:
<html>
<head>
<style>
<!--
.some_class {
padding-left: 2px;
border: 2px solid green;
}
-->
</style>
<script>
<!--
function showDetails()
{
var elem = document.getElementById("my_div");
alert("elem.className=" + elem.className);
alert("elem.style.padding=" + elem.style.padding);
alert("elem.style.paddingLeft=" + elem.style.paddingLeft);
alert("elem.style.margin=" + elem.style.margin);
alert("elem.style.marginLeft=" + elem.style.marginLeft);
alert("elem.style.border=" + elem.style.border);
alert("elem.style.borderLeft=" + elem.style.borderLeft);
}
-->
</script>
</head>
<body>
<div id="my_div" class="some_class" style="width: 300px; height: 300px; margin-left: 4px;">
some text here
</div>
<button onclick="showDetails();">show details</button>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果单击按钮,则可以看到填充未报告正确.仅报告通过"样式"直接定义的属性,不报告通过CSS类定义的属性.
有没有办法找回这些属性的最终值?我的意思是浏览器计算并应用所有CSS设置后获得的值.
几个星期前我在MySQL中使用了一个查询来描述一个表,并建议对其结构进行可能的改进.例如,如果我有一个int字段但只有该字段中的数字1-3,则建议将set(1,2,3)作为类型.
我想我正在使用phpMyAdmin,但我已经完成了我能找到的所有功能 - 分析,描述,解释,优化等 - 无济于事.我不能为我的生活记住查询的内容!
我使用通用存储库接口,允许我添加,查找,更新和删除不同类型的对象.然后我实现了两个具体的存储库,可以在不更改应用程序的情况下切换它们.一切都奇妙地断开了.但我遇到了障碍.我的存储库方法中的代码感觉不对,我无法弄清楚如何做得更好.这是我的代码片段:
public class OracleRepository<T> : IRepository<T> where T : new()
{
public IQueryable<T> GetAll()
{
if (typeof(T) == typeof(Object1))
{
return (IQueryable<T>)DataAccess.GetAllObject1().AsQueryable();
}
if (typeof(T) == typeof(Object2))
{
return (IQueryable<T>)DataAccess.GetAllObject2().AsQueryable();
}
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我的DataAccess(从datareader创建对象)不是通用的,并且对于它支持的每种类型的对象都有特定的方法.
我可以重写上面的内容,以便我使用泛型或其他方法避免使用if-then-elseif列表吗?
我使用ASP.NET成员资格来验证我的Web应用程序.这对我很有用.我现在必须实现密码到期.
如果密码已过期,则应将用户重定向到ChangePassword屏幕,并且不允许在不更改密码的情况下访问应用程序的任何其他部分.
有很多aspx页面.如果密码已过期,一种解决方案可能是重定向到每个aspx 的ChangePassword屏幕OnInit.有没有其他解决方案或建议.
谢谢,Jai