2010年05月23日
眩暈がするコード
自前アロケータのマルチスレッド対応について。
プリエンプティブな環境に持ってきたら吹っ飛んだw
当然だけど。
こんなコード書きながら、得意げにどや顔する彼に何て言えば良いでしょうか。
// 自前アロケータmalloc void *malloc(size_t size) { pMutex->Lock(); // 16バイトアライメントで空き容量取得して使用済みにする。 MEMORY_TAG *tag = FindFreeTag(16, size); tag->bUse = true; pMutex->Unlock(); return tag->buff; } // 自前アロケータのfree() void MyFree( void *ptr ) { // メモリ管理タグから該当のタグを探して未使用領域にする。 pMutex->Lock(); MEMORY_TAG *tag = FindTag( ptr ); tag->bUse = false; pMutex->Unlock(); // 空きメモリを他の空きメモリと結合させる // この関数の中で「pMutex」のロックをしてるらしい。 CompactionTag( tag ); }ノンプリエンプティブな環境だと問題なかったんだけれど、
プリエンプティブな環境に持ってきたら吹っ飛んだw
当然だけど。
こんなコード書きながら、得意げにどや顔する彼に何て言えば良いでしょうか。
take_de_x at 18:24│Comments(0)│コンピュータ系