在我的应用程序中,我有一个类,我希望一次只能由一个线程访问其方法。此类对 COM 端口上的设备执行一些操作,我不希望一个线程写入端口,而另一个线程正在写入等。
要使用这个类(不是由我维护的),我有一个服务类,它将使用 COM 的类和服务器作为 API 层实例化到我的应用程序的其余部分。虽然 COM 类不是我直接维护的,但我可以编辑它。只是我的一个同事创建了它,我只在其中修复错误。那里有很多我不想接触的低级位操作。
我将如何强制执行仅对 COM 类的单线程访问。
选项A(我目前已经实施):
class Service
{
private ComClass comClass;
private readonly object syncRoot = new object();
public void DoThisWithCom()
{
lock(syncRoot)
{
comClass.DoSomething();
}
}
}
选项 B:
class Service
{
private ComClass comClass;
public void DoThisWithCom()
{
lock(comClass)
{
comClass.DoSomething();
}
}
}
选项 C(这是可能的,因为我可以编辑 COM 类的代码):
class Service
{
private ComClass comClass;
public void DoThisWithCom()
{
lock(comClass.SyncRoot)
{
comClass.DoSomething();
}
}
}
也许最好将所有这些都放在 COM 类方面,因为多个线程应该不可能同时使用此类中的方法。
想法?