jjzjj

Thread-Safe

全部标签

c# - Thread.Sleep 的精度还很差吗?

我的印象是Thread.Sleep(x)并不精确,它所做的只是让线程在最小值x女士。参见here,here和here.当sleep时间很短时,例如1ms,预计你会发现线程偶尔会休眠大约15ms。这是apparently由于时钟中断率默认为每秒64次。几年前我尝试过这个,事实上,我也体验过15ms分辨率。但是,我刚刚再次尝试,现在我看到了1ms到2ms的分辨率,很少>2ms。有什么变化?.NET是否发生了变化(我现在使用的是4.6,不记得我2年前使用的是什么)?也许是操作系统发生了变化?(我使用过并且仍在使用AWSEC2WindowsServer,但也许有更新。)我的简单测试程序:pri

c# - Thread.Sleep(0) 没有按描述工作?

我正在阅读thisexcellentarticle关于线程并阅读以下文本:Thread.Sleep(0)relinquishesthethread’scurrenttimesliceimmediately,voluntarilyhandingovertheCPUtootherthreads.我想测试一下,下面是我的测试代码:staticstrings="";staticvoidMain(string[]args){//CreatetwothreadsthatappendstringsThreadthreadPoints=newThread(SetPoints);Threadthread

c# - 为什么 Thread 不实现 IDisposable?

我注意到System.Threading.Thread实现了终结器而不是IDisposable。推荐的做法是在实现终结器时始终实现IDisposable。杰弗里·里希特wrote该准则“非常重要,应始终无一异常(exception)地遵守”。那么为什么Thread不实现IDisposable?看起来实现IDisposable将是一个不间断的更改,它将允许确定性地清理Thread的可终结资源。还有一个相关的问题:由于线程是可终结的,我是否必须保留对正在运行的线程的引用以防止它们在执行期间被终结? 最佳答案 处理Thread对象会做什么

c# - 如何制作从 C# "Thread-safe"调用的 C (P/invoke) 代码

我有一些使用单个全局变量的简单C代码。显然这不是线程安全的,所以当我在C#中使用P/invoke从多个线程调用它时,事情就搞砸了。如何为每个线程单独导入此函数,或使其成为线程安全的?我尝试声明变量__declspec(thread),但这导致程序崩溃。我还尝试制作一个C++/CLI类,但它不允许成员函数是__declspec(naked),我需要(我正在使用内联汇编)。我在编写多线程C++代码方面经验不足,因此可能缺少某些内容。下面是一些示例代码:C#[DllImport("MyDll.dll",CallingConvention=CallingConvention.Cdecl)]pu

C# - 线程中止异常(Thread Abort Exception)重新抛出自身

我有当前代码:classProgram{privatestaticvoidMain(){while(true){try{Thread.CurrentThread.Abort();}catch(ThreadAbortException){Console.WriteLine("Abort!");Thread.ResetAbort();}Console.WriteLine("nowwaiting");Console.ReadKey();}}}现在我知道ResetAbort方法应该可以防止ThreadAbortException继续重新抛出自身,即使catch语句正在捕获它,但我的问题是:如果

c# - "thread-safe type"到底是什么?我们什么时候需要使用 "lock"语句呢?

我阅读了所有关于线程安全类型和“锁定”语句的文档,但我仍然没有100%理解它。具体什么时候需要使用“lock”语句?它与(非)线程安全类型有何关系?谢谢。 最佳答案 想象一个类的实例,里面有一个全局变量。想象一下,两个线程同时对该对象调用一个方法,并且该方法更新内部的全局变量。变量中的值很可能会被破坏。不同的语言和编译器/解释器会以不同的方式处理这个问题(或者根本不处理......)但关键是你会得到“不希望的”和“不可预测的”结果。现在假设该方法在尝试读取或写入变量之前获得变量的“锁”。第一个调用该方法的线程将获得变量的“锁”,第二

c# - MSDN : What is "Thread Safety"?

在许多MSDN文档中,这写在线程安全标题下;“此类型的任何公共(public)静态(在VisualBasic中为共享)成员都是线程安全的。不保证任何实例成员都是线程安全的。”例如;here有人可以用一种相当简单的方式解释一下吗?谢谢:) 最佳答案 埃里克·利珀特(EricLippert)表现出色blogpost对这个。基本上它本身有点毫无意义。当我看到那个样板时,就我个人而言,在这方面我不太相信MSDN。它并不总是意味着它所说的。例如,它对Encoding说了同样的话-尽管事实上我们都在各处使用来自多个线程的编码。除非我有任何理由不

c# - Thread.sleep vs Monitor.Wait vs RegisteredWaitHandle?

(以下项目有不同的目标,但我很想知道它们是如何“暂停”的)问题Thread.sleep-它会影响系统的性能吗?它会占用线程等待吗?Monitor.Wait呢?他们“等待”的方式有什么不同?他们会在等待时占用线程吗?RegisteredWaitHandle怎么样?此方法接受等待时执行的委托(delegate)句柄发出信号。在等待期间,它不会占用线程。所以一些线程被暂停并且可以被委托(delegate)唤醒,而其他线程只是等待?旋转?有人可以把事情说清楚吗?编辑http://www.albahari.com/threading/part2.aspx 最佳答案

c# - Thread.IsAlive 和 Thread.ThreadState==ThreadState.Running

我正在使用if(Thread.IsAlive)检查线程的状况。该线程中正在运行一个表单。有时在执行过程中,即使窗体保持打开状态,对Thread.IsAlive的调用似乎评估为false。我想用if(Thread.ThreadState==ThreadState.Running)执行相同的检查。这是正确的做法吗?如果不是,可能的解决方法是什么? 最佳答案 msdnThread.IsAlive属性如果此线程已启动且未正常终止或中止,则为true;否则为假。msdn线程.ThreadState运行线程已经启动,没有阻塞,也没有挂起的Thr

c# - 为什么不无缘无故地使用 thread.sleep,并向程序员解释

在我们的项目中传递代码时,我遇到了一个web方法,它的末尾有这段代码:thread.sleep(6000);returntrue;现在,这样做是为了延迟来自客户端的jQueryajax调用,并且ajax动画将显示更长的时间。在我看来这是非常错误的。UI和服务器端之间不应该有这种连接。如果他希望动画时间更长,他可以在客户端使用setTimeOut函数。这是我的问题:我如何向程序员解释为什么这是错误的?不仅仅是因为客户端/服务器的事情,还因为为什么要在网站上调用thread.sleep? 最佳答案 延迟时:您正在使用/阻塞线程你正在消耗