草庐IT

thread_safe

全部标签

c# - 可移植类库中的 Thread.Sleep()

MSDN文档说Thread.Sleep()可以在可移植类库中使用。编译器另有说明。除了自旋循环,我还有哪些选择?Thread.CurrentThread.Join()也不存在。项目文件:DebugAnyCPU{C46B138E-CC30-4397-B326-8DD019E3874B}LibraryPropertiesx0xtest.AVRx0xtest.AVRv4.0Profile3512{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}truefullfalsebin\Debug\

c# - 有没有办法在 c# 中获取所有线程的堆栈跟踪,比如 java.lang.Thread.getAllStackTraces()?

在Java中,可以获得所有正在运行的线程的堆栈跟踪的快照。这是用java.lang.Thread.getAllStackTraces()完成的(它返回Map)。如何使用.net完成此操作? 最佳答案 所以我实际上只需要弄清楚如何做到这一点——还没有在生产中广泛使用这个解决方案,但是有一个相对较新的库,叫做ClrMd。http://blogs.msdn.com/b/dougste/archive/2013/05/04/clrmd-net-crash-dump-and-live-process-inspection.aspx使用它,我能

c# - Thread.Sleep 或 Thread.Yield

我有一个方法,它使用后台工作程序轮询DLL以获取如下所示的状态:vartimeout=DateTime.Now.AddSeconds(3);while(System.Status!=Status.Complete//ourstatusisnotcomplete&&DateTime.Now查看我的CPU%时,yield()和spinwait()导致我的应用在我的PC上使用率高达50%。使用Sleep(1),我的CPU%保持在6%。有人告诉我应该选择Thread.Yield(),但是CPU%的峰值让我很困扰。像这样的最佳做法是什么? 最佳答案

c# - 是 Thread.Sleep(Timeout.Infinite);比 while(true){} 更有效?

我有一个控制台应用程序,我想在监听事件的同时一直保持打开状态。我已经测试了Thread.Sleep(Timeout.Infinite);和while(true){}并且都允许在保持控制台应用程序打开的同时引发事件。有没有我应该优先使用的?如果线程正在休眠,是否有任何我不应该做的事情,例如修改类范围内声明的静态集合? 最佳答案 我建议使用ManualResetEvent(或其他WaitHandle),并调用ManualResetEvent.WaitOne.这将具有与永远sleep类似的效果,除了它为您提供了一种干净的方式,可以在需要时

c# - System.Threading.Timer 的可扩展性如何?

我正在编写一个需要使用Timer的应用程序,但其中可能有很多。System.Threading.Timer类的可扩展性如何?文档只是说它是“轻量级”,但没有进一步解释。这些计时器是否被吸收到代表Timer处理所有回调的单个线程(或非常小的线程池)中,或者是否每个Timer都有自己的线程?我想用另一种方式来改写这个问题:System.Threading.Timer是如何实现的? 最佳答案 我这样说是为了回答很多问题:不要忘记框架的(托管)源代码是可用的。您可以使用此工具来获取所有信息:http://www.codeplex.com/N

c# - BackgroundWorker 和 System.Threading.Thread 之间的区别

使用BackgroundWorker创建线程和使用System.Threading.Thread创建线程有什么区别? 最佳答案 BackgroundWorker类基本上抽象了Thread创建和监控过程,并为您提供一个事件驱动的API来报告操作的进度(ProgressChanged)并确定您的操作何时完成(RunWorkerCompleted)...它最常见的用途之一是在长时间运行的进程在后台执行时保持WindowsGUI响应。所以基本上,它只是System.Threading.Thread的包装器,旨在使后台线程更简单一些(顾名思义

c# - Thread.VolatileRead()与Volatile.Read()

在大多数情况下,我们被告知比Volatile.Read更喜欢Thread.VolatileRead,这是因为后者散发出全围栏,而前者仅散发相关的半围栏(例如,获取围栏);效率更高。但是,据我所知,由于Thread.VolatileRead的实现,Volatile.Read实际上提供了Thread.VolatileRead不提供的某些功能:publicstaticintVolatileRead(refintaddress){intnum=address;Thread.MemoryBarrier();returnnum;}由于实现的第二行有完整的内存屏障,我相信VolatileRead实际

c# - Thread.Sleep 少于 1 毫秒

我想在不到1毫秒的时间内调用线程休眠。我读到thread.Sleep和Windows操作系统都不支持它。解决方案是什么?对于所有想知道我为什么需要这个的人:我正在进行压力测试,想知道我的模块每秒可以处理多少条消息。所以我的代码是://SettherelativepartofSecondhatwillbeallocatedforeachmessage//Forexample:5messages-everymessagewillget200milisecondsvarquantum=1000/numOfMessages;for(vari=0;i我很乐意听取您的意见。

c# - 使用 SocketAsyncEventArgs 时是否可以删除 ExecutionContext 和 Thread 分配?

如果您分析一个使用SocketAsyncEventArgs的简单客户端应用程序,您会注意到Thread和ExecutionContext分配。分配的来源是SocketAsyncEventArgs.StartOperationCommon,它使用ExecutionContext.CreateCopy()创建ExecutionContext的副本。ExecutionContext.SuppressFlow似乎是抑制此分配的好方法。但是,此方法本身会在新线程中运行时生成分配。如何避免这些分配? 最佳答案 SocketAsyncEventA

c# - "type-safe"和 "strongly typed"是同一个意思吗?

“类型安全”和“强类型”是同一回事吗? 最佳答案 不,不一定-虽然这取决于您对术语的定义,并且没有非常明确和广泛接受的定义。例如,动态编程语言通常是类型安全的,但不是强类型的。换句话说,没有编译时类型信息来确定您可以对类型做什么和不能做什么,但在执行时,运行时会确保您不会将一种类型当作另一种类型来使用。例如,在C#4.0中,您可以:dynamicfoo="hello";dynamiclength=foo.Length;//UsesString.Lengthatexecutiontimefoo=newint[]{10,20,30};l