別のやり方で順序を定義してもいい。
一般には、以下の条件が満たされる比較順序なら何でもいい。
ある型の値 x, y, z に対して
1. x
【C++】STL(Standard Template Library)相談室 7
std::dequeの先頭末尾追加に関する、定数時間でいけるよ派vs償却定数時間じゃないとむりぽ派のやりとりのまとめ。
gnuplot_preambleか。複数のグラフを重ねたいときは、第一引数を[x,x*x]とかか。チラ裏。
すべてのパッケージがこうやってコンパイル・リンクされてるLinuxディストリビューションというのを妄想したがどうか。だめか。iccめ。
と、よく知りもしないことを2分で調べて書いてみた。1日1つくらい小ネタを仕込みたい俺としてはこのへんに粘着してみるのも悪くないと思った。root or CAP_SYS_TIMEが必要だと書き忘れたな。まぁどうでもいいか。
Twitter / SATO Yusuke: ps -LfしたときのNLWP(スレッド数)って、/p…
/proc/pid/task/をreaddir_rするのも嫌だしなぁ。
うげ、pthread_cancel()したスレッドってpthread_join()しないとリソースが漏れたりするんだっけ???
手元で試す…確かに、joinしないとdeferredでcancelしたスレッド用のスタックのメモリ(手元のFedora/2.6.21/NPTLだと10MB)がleakする。munmapされない。自分ではcancelなど滅多にしないこともあり、承知してなかった。detached状態で生成したスレッドだとどうなるかなぁ。
ま、ちゃんとcancelされたことを確認するためにもjoinしたほうがいいかな。でも、ちゃんと(遅延)cancelするのは難しいんだよな。やっぱcancelなんてやーめたと思い直すほど。
Jakub Jelinek - [PATCH] i386 backtrace () using _Unwind_Backtrace
malloc云々のところはパス。所在はlibgcc_s.so。手元のglibcだと、x86_64のbacktrace(3)は_Unwind_Backtrace()を使っているっぽくて、x86のは使ってないっぽかった。ぱっと見なので嘘かも。
% nm -D /lib64/libgcc_s.so.1 | grep _Unwind_Backtrace
00000031b08087b0 T _Unwind_Backtrace
% nm -D /lib/libgcc_s.so.1 | grep _Unwind_Backtrace
0000000000d5a650 T _Unwind_Backtrace
http://google-perftools.googlecode.com/svn/trunk/INSTALL
google-perftoolsのソースのコメント、INSTALLファイルと、READMEファイルにはいろいろ面白いことが書いてあるので必見だ。ARM portにも関係する部分だと… まず、x86_64とかarmは、-O2で勝手に-fomit-frame-pointerするという点だな。もし、perftools組込みの、DWARF CFI (.eh_frameセクションとか) を使わない簡易backtracerを使うなら、perftools本体を-fno-omit-frame-pointerでコンパイルしないと明らかにまずい (ので./configure時に—enable-frame-pointer しないといかん>おれ)。解析対象も-fno-omit-frame-pointerしてやらないとだな。最初からインストールされてるDSOは、しょうがないねえ。この部分のプロファイルはちょっとおかしくなりますよということで。特にコールグラフとか。
あとは、libunwindを使えば、CFIのほうを見てbacktraceできるのでこの問題はなくなるとか(ARM対応してんのかねこれ。あと、READMEのほうに更なる問題が書いてあったかも)、glibcのbacktrace(3) and/or(あとで調べる) libgccの_Unwind_Backtrace()は、x86_64だと? (あとで調べる) 中でmallocしてるからdeadlockするかも、使うなとか、そのへんのあれこれも書いてある。
setitimer and nanosleep issue.
元質問は、「nanosleepで寝てると、いつまで待ってもsetitimer(ITIMER_VIRTUAL)が発火しないんだけど?(SIGVTALRMが飛んでこないんだけど?)」というもの。引用部分が答え。ITIMER_PROFのSIGPROFならともかく、VIRTUALならシグナルされそうだと思ってしまいがちなので注意(さっきうっかり同じ疑問を抱いた)。カーネル内で仕事をしているならVIRTUALなシグナルは飛んでくるが、カーネル内で寝ている(CPUを使っていない)と飛んでこない。カウントされない。