2

同じ物理メモリ (GPIO データ アドレス) にアクセスする 2 つのプロセスがあります。では、これらのアプリ間で同期するにはどうすればよいでしょうか? ミューテックスやセマフォなど、ある種のロック機構があることは理解していますが、どの方法が最速ですか?

お手伝いありがとうございます、

-nm

4

2 に答える 2

0

ミューテックスとセマフォは、一般に、同じアドレス空間での同時実行ソリューションと見なされます。つまり、同じプログラムのさまざまな部分が、これらの仕掛けの 1 つを使用してリソースへのアクセスをロックします。

別々のプロセスを扱っている場合、Linux でこれを行う標準的な方法は/var/lock、 のようなものを作成し/var/lock/myapp.lock、その中に PID とそれに続く改行を配置することです。次に、他のプロセスがその存在をチェックし、巧妙であれば PID をチェックして、それがまだ生きていることを確認します。

その領域へのリアルタイムアクセスが必要な場合は、ファイルシステムをスキップすると、プロセスは IPC 経由で通信する必要があります ( LET_ME_KNOW_WHEN_DONE、おわかりのとおりOKAY_IM_DONEです )。 GPIO メモリ、および他のプログラムは IPC を介して通信します(おそらく最良の方法です)。

于 2009-11-01T07:05:40.083 に答える
0

ミューテックスは相互排除を意味します。セマフォは、リソースが使用中かどうかを判断するために使用される単なる変数です。Windows には、共有リソースを保護するために作成できる Mutex オブジェクトがあります。

問題は、何語を使っているかです。どのOS(Linuxを想定しています)。ほとんどの言語はマルチスレッドと相互排除をサポートしているため、組み込みの構造を使用する必要があります。

たとえば、Linux で C を使用すると、

semaphore.h をインクルード

sem_init、sem_wait などの呼び出しを調べます。

于 2009-11-01T07:07:11.500 に答える