【发布时间】:2012-09-22 02:56:36
【问题描述】:
我想用 c# 在我的 windows 应用程序中创建自己的事件系统。为此,我编写了以下类:
internal class EventManager
{
private static List<EventRecord> s_listEvents = new List<EventRecord>();
public static void AddEvent(EventRecord record)
{
record.EventDate = DateTime.Now;
s_listEvents.Add(record);
}
public static List<EventRecord> GetRecordsByDate(DateTime date)
{
var r = (from l in s_listEvents
where l.EventDate >= date
select l).ToList<EventRecord>();
return r;
}
}
我想确保 EventManager 类是线程安全的。因为我要在我的应用程序中同时创建数百个线程。所有线程很可能会使用这个类来生成事件。并且GetRecordsByDate函数可能会在从不同线程调用AddEvent函数时从类外部调用。
简单地说,你能告诉我这种设计适合多线程windows应用程序吗?如果这不是线程安全的,那么我怎样才能使我的类或其成员线程安全?我应该使用同步对象来锁定整个 EventManager 类还是应该使用 readwritelocker 来锁定我的 s_listEvents 静态成员?
【问题讨论】:
-
数百个线程并不理想。即使被阻塞,线程也相对昂贵。
-
我的应用程序必须通过 tcp 从远程机器收集数据。并且这种收集操作必须在给定的持续时间内完成。所以我必须创建很多线程。我可以通过硬件负载平衡(比如使用多个服务器)来减少线程数,但在所有情况下,我的应用程序都将是多线程应用程序。
-
为什么需要创建自己的事件系统?
-
@AlexandreVinçon 我将为事件系统添加一些功能。这就是我想控制事件逻辑的方式。
标签: c# multithreading static-methods