1

異なる反復で同じキューを使用しているため、キューからポップせずに要素にアクセスするためにstd::dequeat関数を使用しています。私のソリューションは、粗粒度のマルチスレッドに基づいています。今、私はそれをきめ細かいマルチスレッドソリューションにしたいと思いました。そのために、私はtbb::concurrent_queueを使用しています。しかし、tbb::current_queueでの操作にstd::dequeと同等の関数が必要ですか?

編集 これは私がstd::deque(粗粒度マルチスレッド)で実装している方法ですdqは静的キューであることに注意してください(つまり、異なる反復で何度も使用します)

vertext_found = true;
std::deque<T> dq;
while ( i < dq->size())
{
    EnterCriticalSection(&h);
    if( i < dq.size() ) 
    {
          v = dq.at(i);      // accessing element of queue without popping
          i++;
          vertext_found = true;
    }
    LeaveCriticalSection(&h);
    if (vertext_found && (i < dq.size()) && v != NULL)
    {
          **operation on 'v'
          vertext_found = false;
    }
}

tbb :: current_queueで同じ結果を達成したいですか?

4

2 に答える 2

0

TBB サイトの Doxygen ドキュメント ( TBB Doxy docsat ) によると、キューに操作はありません。pushtry_pop要素を操作できtbb::strict_ppl::concurrent_queueます。

tbb::deprecated::concurrent_queue(古いバージョンの TBB) を使用している場合は、 および 操作が利用できpush_if_not_fullますpop_if_present

両方のキューで、簡単なセクションで述べたように、「複数のスレッドがそれぞれ同時にプッシュおよびポップする可能性があります」。

于 2013-03-05T17:58:14.233 に答える