草庐IT

c# - 如何正确锁定值类型?

我正在阅读有关线程和锁定的内容。您不能(也不应该)锁定值类型是常见的做法。那么问题来了,推荐的锁定值类型的方式是什么?我知道有几种方法可以做一件事,但我还没有看到一个例子。虽然MSDN论坛上有一个很好的话题,但我现在似乎找不到了。谢谢 最佳答案 使用另一个对象进行锁定。intvalueType;objectvalueTypeLock=newobject();voidFoo(){lock(valueTypeLock){valueType=0;}} 关于c#-如何正确锁定值类型?,我们在St

c# - 关于使用 Monitor.TryEnter 和锁定对象的问题

考虑以下实现仅对一个线程的非阻塞访问的函数。publicboolTryCancelGroup(){if(Monitor.TryEnter(_locked)){if(_locked==false){_locked=true;try{//dosomething}catch(Exceptionex){_locked=false;}finally{Monitor.Exit(_locked);}}return_locked;}else{returnfalse;}}下面是_locked变量的定义方式。bool_locked=false;现在,当程序到达Monitor.Exit(_locked);时

c# - 基于key的异步锁

我正在尝试找出我的ImageProcessor库中出现的问题here将项目添加到缓存时出现间歇性文件访问错误。System.IO.IOException:Theprocesscannotaccessthefile'D:\home\site\wwwroot\app_data\cache\0\6\5\f\2\7\065f27fc2c8e843443d210a1e84d1ea28bbab6c4.webp'becauseitisbeingusedbyanotherprocess.我编写了一个类,旨在根据哈希url生成的key执行异步锁定,但似乎我在实现中遗漏了一些东西。我的加锁类publics

c# - 通过 C# 强制关闭打开的文件

我发现了一个类似的问题here但它被关闭/接受了“不要那样做”的回答。我处于这样一种情况,我不关心其他应用程序会发生什么,我想获取一个可能被其他人锁定的文件(如果需要的话粗暴地锁定)并按照我的方式处理它。我可能需要move、重命名或删除此文件。基本上,我需要处理目录中的文件,该目录由不清除其锁的应用程序创建。我知道应用程序在我调用时已完成处理,但我需要在运行时取消锁定。此外,我似乎与扫描服务器所在的远程共享的本地AV软件的读取冲突。所有这些加起来导致无法解决的“强制关闭”情况,因此我可以做我需要做的。有人知道该怎么做吗? 最佳答案

c# - 线程同步。 lock 究竟是如何访问内存 'correct' 的?

首先,我知道lock{}是Monitor类的合成糖。(哦,句法糖)我正在处理简单的多线程问题,发现不能完全理解锁定内存的任意字如何保护整个其他内存不被缓存是寄存器/CPU缓存等。使用代码示例来解释我在说什么更容易关于:for(inti=0;i最后ms_Sum将包含100000000,这当然是预期的。现在我们准备在2个不同的线程上执行相同的循环,并且上限减半。for(inti=0;i由于没有同步,我们得到不正确的结果-在我的4核机器上它是随机数接近52388219这略大于100000000的一半.如果我们将ms_Sum+=1;包含在lock{}中,我们当然会得到绝对正确的结果100000

c# 锁定传递给方法的引用 - 不好的做法?

我有一个类似的方法:publicstaticvoidDoSomething(stringparam1,stringparam2,SomeObjecto){//.....lock(o){o.Things.Add(param1);o.Update();//etc....}}几点:以这种方式锁定是不好的做法吗?我应该锁定一个私有(private)静态对象吗?如果是,为什么? 最佳答案 为了尽量减少副作用,被锁定的对象不应是被操作的对象,而是指定用于锁定的单独对象。根据您的要求,有几个选项可用于处理此问题:变体A:私有(private)锁定

c# - 如何锁定在多个线程中使用的变量

我在这里问了一个很糟糕的问题Lockonavariableinmultiplethreads所以为了清楚起见,我将在这里提问,希望我能正确提问。classAcreatesinstanceofclassBhasmethodAthatcanupdate&usesclassB'smyVarhasmethodBthatcanupdate&usesclassB'smyVarclassBhasavariablemyVarmethodA和methodB都可以在单独的线程中运行(在主线程中调用)。我如何确保这是线程安全的? 最佳答案 使用lock关

C# - 使用 EnterWriteLock 锁定问题

以下代码来自MSDN:privateReaderWriterLockSlimcacheLock=newReaderWriterLockSlim();privateDictionaryinnerCache=newDictionary();publicvoidAdd(intkey,stringvalue){cacheLock.EnterWriteLock();try{innerCache.Add(key,value);}finally{cacheLock.ExitWriteLock();}}我在其他地方看到过这样的代码。EnterWriteLock()总是在tryblock之外。有谁知道为

c# - 我可以在锁中放一个返回语句吗

欺骗:returnstatementinalockprocedure:insideoroutside标题有点误导。我知道您可以做到,但我想知道对性能的影响。考虑这两个代码块。(没有错误处理)这个block在锁之外有returnpublicDownloadFileDequeue(){DownloadFiletoReturn=null;lock(QueueModifierLockObject){toReturn=queue[0];queue.RemoveAt(0);}returntoReturn;}这个block有return语句在锁中publicDownloadFileDequeue()

c# - 使用 lock 语句在 C# 中递归/嵌套锁定

这个问题在这里已经有了答案:关闭12年前。PossibleDuplicate:Re-entrantlocksinC#我在StackOverflow和MSDN上看过这里,不敢相信我在互联网上找不到这个问题。假设我有一个包含私有(private)成员的类,我想通过多个公共(public)方法访问该成员。这些公共(public)方法将被不同的线程调用,因此需要同步。publicclassMyClass{privateObjectSomeSharedData=newObject();publicvoidMethodA(){lock(SomeSharedData){//dosomethingMe