私のアプリケーションには、一度に1つのスレッドだけがメソッドにアクセスしたいクラスがあります。このクラスは、COMポート上のデバイスでいくつかの操作を実行し、一方のスレッドがポートに書き込み、もう一方のスレッドが書き込みを行っているなどのことを望まない。
このクラス(私は管理していません)を使用するために、COMを使用するクラスとサーバーをAPIレイヤーとしてアプリケーションの残りの部分にインスタンス化するServiceクラスがあります。COMクラスは私が直接管理しているわけではありませんが、編集することはできます。同僚が作成しただけで、バグ修正のみを行っています。そこには、触れたくない低レベルのビット操作がたくさんあります。
COMクラスへの1スレッドのみのアクセスを強制するにはどうすればよいですか。
オプション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クラス側に配置することをお勧めします。
考え?