私はブースト共有ミューテックスについていくつかのテストコードを書いています。私は時々boost :: shard_lockが作成に失敗したことに気付きました。ブースト共有ロックの作成に失敗しました
私はここで誤解しましたか?またはログ/例外を取得する方法は?
const int thnum = 1000;
const int times = 10000;
long total = 0;
boost::shared_mutex shared_mutex_lock;
void shared_mutex_click()
{
for (int i = 0; i < times; ++i)
{
boost::shared_lock<boost::shared_mutex> readerLock(shared_mutex_lock);
++total;
}
}
int main()
{
boost::thread_group threads;
clock_t start, end;
total = 0;
start = clock();
for (int i = 0; i < thnum; ++i)
{
threads.create_thread(shared_mutex_click);
}
threads.join_all();
end = clock();
std::cout << "Shared Mutext Result: " << total << std::endl;
std::cout << "Shared Mutext Time: " << end - start << std::endl;
return 0;
}
テストresuleですが: 共有Mutext結果:7102861 共有Mutext時間:2451
それは次のようになります。 共有Mutext結果:10000000
右?なぜ、何が起こったのか把握する方法、ありがとう。
わかりました。あなたは正しいです。私はboost :: unique_lock readerLock(shared_mutex_lock)を使うべきです。書き込みのために。期待どおりに動作します。そしてあなたの助言BTWに感謝します。 –
QiangLiu
@QiangLiu答えがあなたの問題を解決した場合は、[回答としてマークする](https://stackoverflow.com/help/someone-answers)を検討してください。 – hnefatl