ロックによるパフォーマンスの問題に直面しているこのコードがあります。以下のスケッチを参照してください(とにかく大きすぎる実際のコードを投稿することはできません):
XYZ::process()
{
...
lock();
processSharedData(id );
unlock();
...
}
XYZ::processSharedData(obj id)
{
obj a = accessDataAttr1(id);
//do some integrity checks
//evaluate some conditions and then
func1(attr1, attr2, attr3, ...);
obj b = accessDataAttr2(id);
//do some integrity checks
//evaluate some conditions and then
func2(attr1, attr2, attr3, ...);
obj c = accessDataAttr3(id);
//do some integrity checks
//evaluate some conditions and then
func3(attr1, attr2, attr3, ...);
//do some clean up
return;
}
ここで、func1、func2、および func3 を lock/unlock スコープから移動したいと思います。そのための効率的な方法を提案してください。後で呼び出すために、関数呼び出しをパラメーターとともに保存する方法はありますか?
すべてのパラメーターをメンバー構造体に格納し、関数ポインターを std::list に格納するのはどうですか?
編集:
c++11 がまだ利用できないことを前に言及しなかったことをお詫びします。std:function と std:bind のないソリューションは、今のところ素晴らしいでしょう。