该文件中ReaderWriterLockSlim.EnterUpgradeableReadLock说:
处于可升级模式的线程可以降级到读取模式或升级到写入模式.
如何将锁降级为读锁?文档没有说明......
[编辑:]我不是想要写锁定.我只想将可升级锁降级为读锁,以便另一个线程可以获得可升级锁.
我正在编写一个高性能的解析器,在我看来,它Int32.Parse可能太慢了.我写了一个假设正确输入的简单版本,它表现得更好.那么我应该创建自己的版本吗?或者还有另一种更快的方法吗?
我的方法是这样的:
// parse simple int, assuming relatively correct input (i.e. all digits)
public static int ParseInt32Simply(string str) {
if (str == null) throw new ArgumentNullException("str");
if (str.Length == 0) throw new ArgumentException("str is empty");
int sign = 1, index = 0;
if (str[0] == '-') { sign = -1; index = 1; }
else if (str[0] == '+') { index = 1; }
int result = 0;
for (; index < str.Length; ++index) {
result = 10 …Run Code Online (Sandbox Code Playgroud) 如何找到打开特定文件的进程及其打开,访问和共享模式?此外,是否可以更改流程的这些值?或者甚至可以打开一个文件进行阅读,如果它已被打开以供另一个进程独占访问?
请注意,我不想使打开文件的进程的句柄无效.我只是想能够访问该文件(如果可能的话).
(我主要询问Windows,但欢迎其他平台的解决方案,因为它们有助于社区的知识.)
编辑2:感谢大家提供的工具,但我主要是寻找程序技术(例如使用Win32 API).
在应用程序中,当创建特殊类型的对象时,我需要为每个对象生成唯一ID.这些对象是在工厂中创建的,很有可能在"批量"操作中创建.我意识到框架中的"随机"毕竟不是那么"随机",所以我尝试将时间戳添加如下:
private string GenerateUniqueId()
{
Random randomValue = new Random();
return DateTime.Now.Ticks.ToString() + randomValue.Next().ToString();
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,即使这样也行不通.对于快速连续创建的对象,我生成相同的唯一ID :-(
目前,我正在以粗暴的方式实施如下:
private string GenerateUniqueId()
{
Random randomValue = new Random();
int value = randomValue.Next();
Debug.WriteLine(value.ToString());
Thread.Sleep(100);
return DateTime.Now.Ticks.ToString() + value.ToString();
}
Run Code Online (Sandbox Code Playgroud)
由于这不是一个非常大的应用程序,我认为一个简单快速的技术就足够了,而不是实现一个复杂的算法.
请建议.
我正在使用JBoss Seam 2.2.0 创建一个Web应用程序,我希望在接收它们之前修剪我的输入,甚至在Hibernate Bean Validation阶段之前.这可能吗?
我看到有人用a PhaseListener来做同样的功能.这是最好的方法吗?
我有一段非常简单的代码,如:
@In(create = true) OutletHome outletHome;
Run Code Online (Sandbox Code Playgroud)
它工作正常(使用Seam 2.2.0.GA),并且正在创建和注入对象而没有任何问题.但当我尝试将其更改为:
@In(create = true) OutletHome deactivationOutletHome;
Run Code Online (Sandbox Code Playgroud)
它突然停止工作,导致异常:
org.jboss.seam.RequiredException:@In属性需要非null值:customerHome.deactivationOutletHome
造成这种问题的原因是什么?变量名如何相关?我怎么能解决它?
是否有可能告诉RSpec :: Mocks为一组值存根方法,否则回退到原始方法?例如:
File.stub(:exist?).with(/txt/).and_return(true)
File.exist? 'log.txt' # returns true
File.exist? 'dev.log' # <<< need to fallback to original File.exist? here
Run Code Online (Sandbox Code Playgroud)
目前上面示例中的最后一个调用会引发a MockExpectationError,要求提供默认值.是否有可能指示rspec-mocks回退到原始方法?
我对许可问题的经验很少.假设我正在开发.NET 2.0应用程序.在我的应用程序中使用(和分发)某些.NET 3.5 DLL是否可以?
例如,我可以将我的设置中的"System.Core.dll"复制到客户端的计算机上吗?或者我甚至可以提取一些类(例如使用Reflector),将其源代码放在我的一个项目中,并按原样使用它?
我不确定使用Reflector这样做是否合法,但是从Microsoft的Reference Source Server下载同一个类会有什么不同?
在任何情况下,我想我只是使用类,这是框架实际提供的.对我的想法有一些误解吗?
一位朋友向我请求帮助,建立一个查询,显示每个月的每一天销售的每个模型的数量,在特定日期没有特定模型的销售件时显示零,即使没有任何项目模特在那天出售.我想出了下面的查询,但它没有按预期工作.我只获得已售出的模型的记录,我不知道为什么.
select days_of_months.`Date`,
m.NAME as "Model",
count(t.ID) as "Count"
from MODEL m
left join APPLIANCE_UNIT a on (m.ID = a.MODEL_FK and a.NUMBER_OF_UNITS > 0)
left join NEW_TICKET t on (a.NEW_TICKET_FK = t.ID and t.TYPE = 'SALES'
and t.SALES_ORDER_FK is not null)
right join (select date(concat(2009,'-',temp_months.id,'-',temp_days.id)) as "Date"
from temp_months
inner join temp_days on temp_days.id <= temp_months.last_day
where temp_months.id = 3 -- March
) days_of_months on date(t.CREATION_DATE_TIME) =
date(days_of_months.`Date`)
group by days_of_months.`Date`,
m.ID, m.NAME
Run Code Online (Sandbox Code Playgroud)
我创建了临时表temp_months,temp_days以便获得任何月份的所有日期.我正在使用MySQL 5.1,但我正在努力使查询符合ANSI标准.