2006-01-01から1年間の記事一覧

RAIIもどき in C

GCC

gccの__attribute__((cleanup(fn))) が便利すぎる件について。 C++でコードを書くときは、RAIIとか呼ばれているイディオムを使えば、ご存じの通り、ロックしたmutexを手動で開放する必要もないですし、newしたオブジェクトを手動でdeleteする必要もないです…

Java の ConTest っぽいものを、glibcの新機能(LD_AUDIT)を使って Linux + C/C++ で実現してみる

たまには何か書きます。C/C++のマルチスレッドなプログラムのユニットテストでバグを効率的に見つけるためのライブラリ?の作成について。 IBM dWのConTest はてなブックマークを眺めていたら、「ConTestを使用したマルチスレッド・ユニットのテスト - 並列テ…

GCCの-ftrapv (3)

さて、インフルエンザで寝込んでいる最中ですがここぞとばかりに更新。 以前書いたGCCの-ftrapvをそろそろ実戦投入するかと思ったんですが、3つほど注意点を見つけたのでメモ。 問題1: 3.3.x以前でちゃんとうごかない GCC 3.3.x 以前のlibgccの実装にはバグ…

manのセクション3P

man 3p pthread_mutex_lock とか、man 3p sigwait とか、まぁなんでもいいんですけどセクション3Pを指定してmanを閲覧すると、SUS(v3? v2?)の関数の仕様をほぼそのまま原文で参照することができます。たとえばpthread_mutex_lockならこれがそのまま表示され…

シグナルハンドラを使わないでシグナルをハンドルする

「シグナルハンドラの中でできることは非常に限られているんですよ」というお話を1年半くらい前に書きましたが、この話には続きがあって、ある特定の条件下ではこの制限を緩和することができます。今回はその方法についての解説です。sigwait(3)という関数を…

GCCの-ftrapv (2)

前回、GCCの-ftrapvを使用すると、符号あり整数同士の演算におけるオーバーフローを検出し、オーバーフロー時にabort()が呼ばれることを示しました。しかし、「abortじゃ意味ないんだよねー、C++の例外をthrowするとか、せめてbacktraceを表示するとかしてく…