草庐IT

线程锁

全部标签

c# - 为每个单独的线程记录到单独的日志文件

我有一个服务应用程序,它在启动时读取一个XML文件并为XML文件中的每个条目启动一个线程。每个线程创建一个工作类的实例,该实例需要一个记录器将任何输出记录到线程特定的日志文件中。在服务app.config中,我将log4net配置设置设置为使用XMLappender,文件被指定为PatternString,如下所示:在创建的每个工作类实例的线程锁定方法中,我使用log4net.LogManager.GetLogger("MyLogger")方法获取记录器,然后设置当前线程的PatternStringsLogName属性使用ThreadContext.Properties["LogNam

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# - 如何在继续之前等待线程完成?

我有一些用于在.NETCF2.0上启动线程的代码:ThreadStarttStart=newThreadStart(MyMethod);Threadt=newThread(tStart);t.Start();如果我在循环中调用它,项目将完全乱序。如何在t.Start()之后引入等待,以便线程上的工作在代码继续之前完成?与手动创建线程相比,BeginInvoke/EndInvoke是否是更好的选择? 最佳答案 您需要对线程施加多少顺序?如果您只需要在代码继续之前完成循环中开始的所有工作,但您不关心循环中工作完成的顺序,那么调用Join

c# - 如果一个线程正在等待 console.readline 线程是否被挂起?

如果线程正在等待控制台。readline是线程挂起。如果不是,它是什么状态? 最佳答案 线程没有挂起。它在方法调用时被阻止。 关于c#-如果一个线程正在等待console.readline线程是否被挂起?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/2744578/

c# - 读写硬盘有多少个线程?

我正在开发一个应用程序,用于收集硬盘驱动器所有文件的列表然后它确实将文件写入硬盘。我想问:执行此任务的最佳并发线程数是多少?我的意思是我应该有多少个线程来读取硬盘驱动器而不创建硬盘驱动器变慢,因为有太多线程同时读取它。谢谢! 最佳答案 首先,我说一个!其实要看读取的数据是否需要经过复杂的运算才能细化。在这种情况下,可以方便地实例化多个线程来处理不同的磁盘数据;但这只有在同一系统上有多个CPU时才方便。否则,多个线程会使HDD承受不必要的压力:来自不同线程的并发读取将发出seek操作来读取文件block(*),引入开销可能会减慢系统,

c# - 为什么 DateTime.Now 需要线程安全?

我正在阅读Joe的AlbahariC#threadingtutorial:作者解释了为什么DateTime.Now需要线程安全:Wrappingaccesstoanobjectaroundacustomlockworksonlyifallconcurrentthreadsareawareof—anduse—thelock.Thismaynotbethecaseiftheobjectiswidelyscoped.Theworstcaseiswithstaticmembersinapublictype.Forinstance,imagineifthestaticpropertyontheD

c# - Parallel Linq - 使用比处理器更多的线程(对于非 CPU 绑定(bind)任务)

我正在使用并行linq,我正在尝试使用如下基本代码同时下载许多url:intthreads=10;Dictionaryresults=urls.AsParallel(threads).ToDictionary(url=>url,url=>GetPage(url);由于下载网页受网络限制而不是CPU限制,因此使用比我的处理器/内核数量更多的线程是非常有益的,因为每个线程的大部分时间都花在等待网络catch。然而,根据在我的双核机器上运行threads=2与threads=10具有相同性能的事实判断,我认为发送到AsParallel的线程数受限于核心数。有什么方法可以覆盖这种行为吗?是否有

c# - 当所有后台线程池线程完成时得到通知

当我使用ThreadPool启动3..10个线程时,我有一个场景。每个线程完成其工作并返回到线程池。当所有后台线程都完成时,在主线程中通知的可能选项有哪些?目前,我正在使用自己开发的方法,为每个创建的线程递增一个变量,并在后台线程即将结束时递减它。这工作得很好,但我很好奇是否有更好的选择。 最佳答案 除非使用Interlocked.Decrement完成,否则(在线程之间)递减一个变量有点冒险,但如果你有最后一个线程(即当它变为零时)raise,这种方法应该没问题一个事件。请注意,它必须位于“finally”block中,以避免在异

C# 单例线程安全

我有一个类似这样的单例类publicclassSingleton{privatestaticSingletonm_instance;privateTimerm_timer;privatestaticListm_cacheObjects;privateSingleton(){m_cacheObjects=newList();m_timer=newTimer(MyTimerCallBack,null,TimeSpan.FromSeconds(60),TimeSpan.FromSeconds(60));}publicstaticSingletonInstance{get{if(m_insta

c# - .NET 的多线程库

我在一些程序中使用了多线程,但仍然感觉不太舒服。有哪些适用于C#/.NET的多线程库,它们之间有哪些优势?我所说的多线程库是指所有有助于简化多线程编程的东西。您定期使用什么.NET集成(即像ThreadPool)?你遇到了哪些问题? 最佳答案 在应用程序中使用多线程有多种原因:界面响应能力并发操作并行加速应该选择哪种方法取决于您要执行的操作。例如,对于UI响应,请考虑使用BackgroundWorker。对于并发操作(例如,服务器:某些东西必须是并行的,但即使在单核系统上也可能确实需要并发),考虑使用线程池或,如果任务是长期存在的并