ポインタ(cv :: Matとbool's)でいくつかのスレッドにいくつかの変数を渡していて、ミューテックスを使用する。私は、cv :: Matのプログラムを使用せずに、私のプログラムがクラッシュする可能性があることを発見しました。(あるスレッドが他のスレッドが読み込んでいるメモリと同じ領域に書き込んでいる可能性が高いためです。問題を修正しました。なぜmutexはmutexを必要としないのですか?mutexにはmutexが必要です...
しかし今、mutexはもう1つの変数です。私は各スレッドにポインタを渡しています。この場合、mutex変数の扱いの使用は、mutexに必要な他の変数と同じです。mutexについて特別なことは、私もmutexは必要ないでしょう。永遠にそしてconeptは働かない)。
明確にするために、私のコードはうまくいきますが、これは教育目的のためのものです。
例:
//Common frames
cv::Mat captureimage, displayimage;
std::mutex capturemutex, displaymutex;
//Start image capture thread
std::thread t_imagecapture(CaptureImageThread, &captureimage, &capturemutex, &exitsignal);
//Start image processor thread
std::thread t_imageprocessor(ProcessImageThread, &captureimage, &capturemutex, &exitsignal);
//Start display thread
std::thread t_displayupdate(DisplayUpdateThread, &displayimage, &displaymutex, &exitsignal);
通常、スレッド間で共有されるすべての変数に対して1つのミューテックスを持つだけで十分です。 –
ミューテックスはスレッドセーフであるように設計されています。これらは、オペレーティングシステムの基本的なメカニズムを使用します。これにより、mutexのロック/ロック解除時に競合条件が発生しないことが保証されます。 – Hayt
"これらの変数にmutexを実装しました" - いいえ、あなたは** mutexを実装していません。あなたはミューテックスを**使用しました**。 –