2

私はスレッディングを強化するのは初めてです(おそらく私を台無しにしたWin32スレッディングから来ました)。

そのため、作業ループがまだ進行していることを確認するための、より「RAII」な方法を作成しようとしています。だから私はこの単純な関数を作りました:

template<typenameT> 
T safe_read(const T& t,boost::mutex& mutex)
{
    boost::interprocess::scoped_lock lock(mutex);
    return t;
}

いつも使っているようなので、これに相当するブーストはありますか?また、これは許容できる呼び出しですか?

アイデアは、より奇妙なロックを使用せずにこれを安全に実行できるようにすることです。

while(!safe_read(this->is_killing_,this->is_killing_mutex_))
{
    DoWork();
}
4

2 に答える 2

3

boost::atomic<bool>c++11 s に基づいて、boost v1.53.0 で追加されましたstd::atomic。例えば:

#include <boost/atomic.hpp>

boost::atomic<bool> is_killing (false);

while (!is_killing)
{
}

これにより、コードから明示的な関数と関数が削除され、mutex必要safe_accessな同期が提供されます。

于 2013-05-09T15:35:15.253 に答える
0

safe_access 関数が戻ると、ロックが解除されるため、あなたが思っているようには機能しないと思います。

于 2013-05-09T15:08:38.883 に答える