同じ物理メモリ (GPIO データ アドレス) にアクセスする 2 つのプロセスがあります。では、これらのアプリ間で同期するにはどうすればよいでしょうか? ミューテックスやセマフォなど、ある種のロック機構があることは理解していますが、どの方法が最速ですか?
お手伝いありがとうございます、
-nm
同じ物理メモリ (GPIO データ アドレス) にアクセスする 2 つのプロセスがあります。では、これらのアプリ間で同期するにはどうすればよいでしょうか? ミューテックスやセマフォなど、ある種のロック機構があることは理解していますが、どの方法が最速ですか?
お手伝いありがとうございます、
-nm
ミューテックスとセマフォは、一般に、同じアドレス空間での同時実行ソリューションと見なされます。つまり、同じプログラムのさまざまな部分が、これらの仕掛けの 1 つを使用してリソースへのアクセスをロックします。
別々のプロセスを扱っている場合、Linux でこれを行う標準的な方法は/var/lock
、 のようなものを作成し/var/lock/myapp.lock
、その中に PID とそれに続く改行を配置することです。次に、他のプロセスがその存在をチェックし、巧妙であれば PID をチェックして、それがまだ生きていることを確認します。
その領域へのリアルタイムアクセスが必要な場合は、ファイルシステムをスキップすると、プロセスは IPC 経由で通信する必要があります ( LET_ME_KNOW_WHEN_DONE
、おわかりのとおりOKAY_IM_DONE
です )。 GPIO メモリ、および他のプログラムは IPC を介して通信します(おそらく最良の方法です)。
ミューテックスは相互排除を意味します。セマフォは、リソースが使用中かどうかを判断するために使用される単なる変数です。Windows には、共有リソースを保護するために作成できる Mutex オブジェクトがあります。
問題は、何語を使っているかです。どのOS(Linuxを想定しています)。ほとんどの言語はマルチスレッドと相互排除をサポートしているため、組み込みの構造を使用する必要があります。
たとえば、Linux で C を使用すると、
semaphore.h をインクルード
sem_init、sem_wait などの呼び出しを調べます。