はてなキーワード: セマフォとは
わからんけど、グラヒクスと音声は リップシンクがあるから必ずしも別じゃないし
そもそも、音声を鳴らすチップ自体が独立したコアみたいなもんだからなぁ・・・
ネットワークチップだって独立したチップのやつは 別のコアみたいなもんだぜ?
話はずれたけど、まともなマルチコア向けプログラムを書くとなると、いわゆる1スレッド1役割みたいな処理は欠かずに
タスクシステムとか、スレッドの役割分担システムみたいなものを自分で書き下ろして、いわゆるマルチファイバーというか、マルチタスク的なシステムで
組んでいくから、(マルチタスクを自前で組むことが必ずしも高速化ではなくて、いくつもノウハウがあるけど) あまり、セマフォというかミューテックスを意識することは少ないよ?
たとえば、ちょっと違うけど 通信が一万本合ったら、1万スレッド起こすのか?起こさないというのと同じかなぁ。
逆に言うと1つのタスク中に入りと出以外に何箇所もロックしたり、開放したりするシステムはコンテキストスイッチの考え方からあまりよくない。
リソースになるべく触らない、触ったらローカルメモリーに移しておく、なるべく長い時間1つのスレッドを走らせる。リソースに触るときは処理終了して次のタスクにしてしまう。
などなど、そんな感じ。 スレッドに役割を振り分ける というよりは、タスクで回していくという感じ。
もちろん、長々走るものもあるだろうけど。
× mutual execution
○ mutual exclusion
×プロセス内の排他であるmutexとプロセス間の排他であるセマフォ
俺の勘違い?
mutexはmutual executionの略で、書籍とかには「ミューテックス」とはあまり書かない。Wikipedia(ja)くらいである。カタカナで書く場合は「ミューテック」と書くことが多い。口語では「ミューテクス」だろうがなんでもいいが「みゅーてっくつ」とか書かれると大丈夫かなと思う。charをたむけんよろしく「ちゃ〜」と読んでないか心配である。「ちゃ〜配列の終端には「なる」をせっていする」とか書いてくれそうでそれは期待。
そしてPOSIX関数の醍醐味であるpthread_createで引数に値を設定しない、呼び先で参照しない。せっかくのvoid*の使い方を覚える機会を捨てている。コンパイル時のエラーを消すためだけにvoid *でキャストしてないか心配である。
pthread_mutex_tは初期化する時にPTHREAD_MUTEX_INITIALIZERを使うかPTHREAD_RECURSIVE_MUTEX_INITIALIZER_NPを使うかPTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NPを使うかでもいいような気もするが、特に触れていない。pthread_mutex_init()の第2引数でNULLを指定するのもpthread_mutexattr_init()で初期化(デフォルト値)するのも複数環境でまったく挙動の違うアプリが出来上がるのでやめた方が自分の身のためなのだが。
排他がかかっているかどうかのチェックならpthread_mutex_trylock()もあるのだが、特に触れていない。
POSIXにはmutexの他に「読み込み中の読み込み」を許可するpthread_rwlock_tもあるのだが、特に触れていない。
プロセス内の排他であるmutexとプロセス間の排他であるセマフォの区別がついていない。これはすごい。
追記
申し訳ない。そんなに煽るようなつもりはなかった。忘れてくれ。自戒のためにこのエントリは残しておくよ。
amachangには頑張ってpthreadを極めてほしい。