ここではC++イベントを実装しようとしています。このイベントの実装を同期する最良の方法は
class Event{
typedef std::tr1::function<void(int&)> CallbackFunction;
std::list<CallbackFunction> m_handlers;
template<class M>
void AddHandler(M& thisPtr, void typename (M::*callback)(int&))
{
CallbackFunction bound = std::tr1::bind(callback, &thisPtr, _1);
m_handlers.push_back(bound);
}
void operator()(int& eventArg)
{
iterate over list...
(*iter)(eventArg);
}}
ここでのトラブルはスレッドセーフです。 AddHandler
とoperator()
が同時に呼び出されると、事態が壊れる可能性があります。
これを同期するにはどのような方法が最適ですか?ミューテックスを使用するとパフォーマンスが低下する可能性があります。この場合、boost :: signalsやC#eventのシーンで何が起こるのだろうか。
1秒あたりの頻度はどれくらいですか?この同じオブジェクトをすべてのスレッドで使用できるようにする必要があるのはなぜですか?彼らはすべて、1つのスレッドで受信したmutexメッセージを送信できませんか? –