私は、mutexでアクセス制御されているオブジェクトをコンテナに持っています。私はしばしばのような何かを:リソースにアクセスするscoped_lockのエレガントなパターン?
rsrc *r;
{
scoped_lock l(mtx);
r = container.pop();
}
// ... use r
(私は、例外の後にクリーンアップすることを確認するなどscoped_lockを使用)しかし、私は(明示的な制御構造の一部ではありません{...}ブロックを好きではありませんscoped_lockのスコープを作成するためにしか存在しません)、rのヌル初期化と、{...}ブロックでの(おそらく特定ではない)割り当てが好きではありません。
私はこのような何か行うことができます。
inline rsrc *locked_pop(mutex &mtx, container &c) { scoped_lock l(mtx); return c.pop(); }
とし、その後
OKですが、私は私が同じ(または異なる)コンテナからいくつかの項目を取得する必要がある場合がありますrsrc *r = locked_pop(mtx, container);
、同じロックの下で
これを行うためのエレガントで一般的な方法をご存じですか? (これは特にBoostの質問ではありませんが、私はこれらのライブラリを使っていますので、Boost-ismは問題ありません)
おそらく、 'struct'を返すでしょう。 – Galik