私が開発しているオープン ソース プロジェクト用に次のコードを最適化する方法、または重い作業を別のスレッドに移動してパフォーマンスを向上させる方法を探しています。
void ProfilerCommunication::AddVisitPoint(ULONG uniqueId)
{
CScopedLock<CMutex> lock(m_mutexResults);
m_pVisitPoints->points[m_pVisitPoints->count].UniqueId = uniqueId;
if (++m_pVisitPoints->count == VP_BUFFER_SIZE)
{
SendVisitPoints();
m_pVisitPoints->count=0;
}
}
上記のコードは、各訪問ポイントが呼び出されるときに、OpenCoverプロファイラー (C++ で記述された .NET 用のオープン ソース コード カバレッジ ツール) によって使用されます。ミューテックスは、一部の共有メモリ (32/64 ビットおよび C++/C# の複数のプロセス間で共有される 64K ブロック) を保護するために使用されます。明らかに、これは各計装ポイントにとってかなり重いので、影響を軽くしたいと考えています。
上記の方法でプッシュされるキューと、スレッドを使用してデータをポップし、共有メモリを作成することを考えています。
Q. 私が使用できる C++ (Windows STL) のスレッド セーフ キューはありますか? または、ある問題を別の問題に置き換えたくないので、ロックレス キューはありますか? 人々は私のアプローチを賢明だと考えていますか?
編集 1: インクルード フォルダーに concurrent_queue.h が見つかりました - これが私の答えでしょうか?