這是我嘗試實現一個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#事件幕後會發生什麼。
他們每秒打電話多久?爲什麼這個相同的對象需要對所有線程都可用?難道他們不能只發送一個線程接收到的互斥信息嗎? – 2012-01-12 00:02:34