Pthread で Semaphore処理

PtheradライブラリのSemaphore処理をちろっと書いてみた。
次はCellのデータ変換の処理でも書こうかなぁ~でも、Semaphoreを使ったほうがいいよね~とか思ったので、じゃあまずSemaphoreのサンプルでも書こうかな。とか思ったのですよ。
Semaphoreは、走るスレッドの数を制限するためのライブラリです。つまり、スレッドは全部で24個走らせたいけれど、SPEが6個しかないから、6個ずつ走らせましょうね。っていう時に使う。
まあ、今回のサンプルは全部で6個のスレッドを2個ずつ走らせるという簡単なやつです。前述の処理をするにはキュー処理とかを追加しないといけないので、今回は別にいいかなぁ~と。

とりあえず、感想を言うと
無駄にCell使ったせいで、Semaphore処理が分かりづらいなぁ・・・ww

後、SPEの方でforの無限ループ使って経過時間を計っているんだけれど、ヘテロジニアスタイプのCPUではこういう事をしても他のプロセス、スレッドに影響及ぼさないから(CPUリソースを食いつぶさない)結構当たり前みたい?前に行ったCellプログラミングチュートリアルではこういうソースを使っていたね。っていうか、SPEに対してシグナルを送って処理を中断する。っていう命令があるんだけれど、そこで良く無限ループを使っているのを見かける。
まあ、余りきれいじゃないよね。でも、SIMD用のRISCチップがEventをきちんと待機するような命令を持っているかどうかは謎。今度友達に聞いてみよう。
さて、ソースはこんな感じ。リポジトリはこちら

う~ん、Cell用にC++で軽くライブラリ作ったほうが良いかもしれないなぁ
Mutex処理なんかは簡単なClassを作って使いまわしているんだよね。プログラムの多重起動防止とかにはMutexを使うので。
dequeueもC++だと最初からあるから、C++使ったほうがコーディングとdebug時間は短縮されるなぁ
っていうかやっぱり、C言語はちょくちょく使わないと忘れてしまうので、たま~にこうやって書いていこう。
今日も激しく時間がかかった・・・w

Leave a comment

0 Comments.

Leave a Reply


[ Ctrl + Enter ]

Spam Protection by WP-SpamFree