google-code-prettify

2008-12-26

TiddlyWikiのデータをEvernoteにインポートする

TiddlyWikiのhtmlデータを、Evernoteでインポートできるenex形式に変換するスクリプトを作った。
http://sakurai.sumomo.ne.jp/tiddlywiki_to_evernote_py

TiddlyWiki 2.3と、Evernote 3.0.0で確認。

TiddlyWikiのタグをいろいろ駆使していると、変換に失敗するかもしれないけど。

スレッドを確実にsuspendする

Solarisのスレッドには、thr_suspend()という関数がある。この関数は、
他のスレッドをsuspendし、thr_suspend()からリターンした時には、ターゲットとなるスレッドが停止している事が保証されている。
という関数である。

pthreadでスレッドAから別のスレッドBをsuspendするには、
pthread_kill(B, SIGSTOP)
を使えば良いのだが、pthread_killからリターンした時点では、スレッドBは停止していない可能性がある。

pthreadでthr_suspend()と同じ機能を実現しようと思ったら、以下のようにすると良い。

1. スレッドBのSIGUSR1のシグナルハンドラを登録しておく。
2. スレッドAは、pthread_kill(B, SIGUSR1)をする。
3. スレッドAは、sem_wait()でセマフォ待ちをする。
4. スレッドBのSIGUSR1のシグナルハンドラで、sem_post()して、スレッドAを起こす。

ポイントは、4。
シグナルハンドラからは非同期シグナルセーフ関数しか呼んではいけないが、sem_post()は非同期シグナルセーフ関数なので、スレッド間の同期を取るのに使う事ができる。

参考:

2008-12-15

CORDIC - 加減・シフトだけで三角関数の計算を行う

CORDICを使うと、加算、減算、ビットシフトだけで三角関数の計算ができる。
らしい。

via current-used@netbsd(だったかな?)