(他なんかあるなら知りたい)ここではpthreadをつかった簡単な非同期処理の実装方法について述べる。2つのループ処理を順番に実行するまずはスレッドを使わず。1~5を順番に表示するforループを2回順番に実行してみる。./sample11234512345まぁ、期待通りというかそのままでしかない結果。これをpthreadを使って並列実行しよう!2つのループ処理を並列に実行するではこのforループ処理をそれぞれスレッドで実行してみる。さっきのプログラムに以下を追加する。リンクしないといけない、ぐらい。./pthread11234512345ファッ!?いやいやいやいや。ごちゃまぜに出力されるはずなのに・・・。思ったが、1~5はさすがに数が少なすぎた。100まで増やしたらバラバラになった。スレッド実行する関数に引数を渡すそれぞれのスレッドかどうかよくわかんないので引数で値を渡して表示するように変更。pthread_createの第4引数が、スレッド実行される関数の引数になる。arg);ちなみに第2引数はスレッド属性というが、使ったことない。常にNULL設定している。仮に使うとしたらスレッドの優先順位だろう。何も設定しないと親と同じ優先順位になるので、こっちのスレッドちょっと強めに、とかしたい場合は変えたりすることもあるかもしれないしないかもしれない。最初のスレッドには"A"を2番目のスレッドには"B"を渡して表示する。./pthread2A=1A=2A=3A=4A=5B=1B=2B=3B=4B=5うん。数が少ないとこうなるわな。すごい量はここに貼りきれないので、実際やって確認して。ある程度の数で交互にABで始めるから。スレッド実行する関数から戻り値を受け取るスレッドで呼び出される関数の中でreturnすると、その値がpthread_joinの第二引数に格納されて戻ってくる。戻り値で帰って来いよ。関数の中のauto変数をそのまま返してよいわけではない。アドレスが危険なので。よってmallocなどでメモリを割り当ててreturnする。受け取った側は当然freeしてやる必要がある。./pthread3~thread1:0thread2:999うまくいった。スレッド実行する関数同士で排他をするそれぞれのスレッドが好き勝手動き回られるとそれはそれで困ることもある。