TiddlyWikiのhtmlデータを、Evernoteでインポートできるenex形式に変換するスクリプトを作った。
http://sakurai.sumomo.ne.jp/tiddlywiki_to_evernote_py
TiddlyWiki 2.3と、Evernote 3.0.0で確認。
TiddlyWikiのタグをいろいろ駆使していると、変換に失敗するかもしれないけど。
google-code-prettify
2008-12-26
スレッドを確実に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()は非同期シグナルセーフ関数なので、スレッド間の同期を取るのに使う事ができる。
参考:
Building an open-source Solaris-compatible threads library
登録:
投稿 (Atom)