SPI デバイスからのデータを処理する Raspberry Pi で C/C++ ユーザー空間アプリケーションを開発しようとしています。IRQ イベントで pthreaded 割り込みハンドラーから呼び出される関数 (実際の割り込みハンドラー) を登録するWiringPiライブラリ (関数wirePiISR ) を使用しています。
STL コンテナーはスレッド セーフではないと聞きましたが、コールバック関数の実行中にミューテックス ロックを設定し、そこにあるバッファー/コンテナーにアクセスするときにメイン スレッドをロックするだけで十分でしょうか?
配線PiISRを介して登録された私の「実際の割り込みハンドラ」は次のようになります
std::deque<uint8_t> buffer;
static void irq_handler()
{
uint8_t data;
while (digitalRead(IRQ_PIN)==0)
{
data = spi_txrx(CMD_READBYTE);
pthread_mutex_lock(&mutex1);
callback(data);
pthread_mutex_unlock(&mutex1);
}
}
static void callback(uint8_t byte)
{
buffer.push_back(byte);
}
または、スレッド化された ISR とメイン スレッド間のデータ交換を実現する簡単な方法はありますか?