私は3つのクラスを持っています。それらをA、B、およびHardwareDriverと呼びましょう。各クラスには1つのインスタンスがあります。 aとbは2つの異なるスレッドで実行されます。彼らはどちらもHardwareDriverのインスタンスを介してハードウェアにアクセスします。ような何か:pthreadsを使用するクラスメンバーとしてのミューテックス
Class A {
... };
Class B {
... };
Class HardwareDriver {
public:
int accessHardware();
};
A a;
B b;
HardwareDriver hd;
pthread_t aThread;
pthread_t bThread;
main() {
pthread_create(&aThread, NULL, &A::startA, &a);
pthread_create(&bThread, NULL, &B::startB, &b);
while (...) { };
return 0;
}
ハードウェアは、同時に、Bでアクセスすることはできませんので、私はミューテックスを使用してコードを保護する必要があります。私はマルチスレッドに直面していますが、直感的に、メソッドhd.accessHardware()を呼び出すことによってハードウェアアクセスを要求する直前に、AとBのメソッドでmutexをロックします。
今、もっとカプセル化のためにhd.accessHardware()でロックを実行することが可能かどうか疑問に思っています。これはまだスレッドセーフであろうか? C/Cでのマルチスレッドプログラミングを行う場合
&bまたはスレッドは、HardwareDriverの同じオブジェクトを使用していますか?はいの場合は、HardwareDriverの1つのオブジェクトだけが作成されるようにします。両方のスレッドで単一のオブジェクトを使用すると安全です。 – Pravin
共有リソースへのアクセスを同期させる必要のある他のクラスがない場合は、A/Bでロック/アンロックを行います。重大ではない非マルチスレッドコンテキストでは、ミューテックスによってオーバーヘッドが追加される可能性があります。信じられないかもしれません:) –