これらの2つのユーティリティには少なくとも2つのパラメーターが必要であることがわかりました。たとえば、ロックするには2つのミューテックスが必要です。
このようにする必要があります(cppreference.comから):
void assign_lunch_partner(Employee &e1, Employee &e2)
{
static std::mutex io_mutex;
{
std::lock_guard<std::mutex> lk(io_mutex);
std::cout << e1.id << " and " << e2.id << " are waiting for locks" << std::endl;
}
{
std::scoped_lock lock(e1.m, e2.m);
}
}
少なくとも2つのパラメータを要求することは意味がありますか?設計上の考慮事項は何でしたか、詳細を知りたいです。
どうもありがとう。
cppreferenceページからあなたは(私の強調)からあなたの例を取りました:
クラスscoped_lockは、スコープブロックの期間中に1つ以上のミューテックスを所有するための便利なRAIIスタイルのメカニズムを提供するミューテックスラッパーです。
std::scoped_lock
は、複数のミューテックスを取得するための便利なユーティリティです。内部でデッドロック回避メカニズムを使用します。C ++ 11とC ++ 14には、しかstd::lock()
ありませんでしたが、RAIIメカニズムではありません(ミューテックスのロックを自動的に解除しません)。
std::scoped_lock
単一のミューテックスで使用することもでき、それはと同等になりますstd::lock_guard
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加