UNIXからの移植で、fork/execを使っているところをどうしようか考えています。Windowsだと、exec元のプロセスがなくなり、プロセスが2つにならないようです。Windowsの場合は、マルチスレッド化するのが常套手段なのでしょうか?
CreateProcess-APIじゃダメなんでしょか?
マルチスレッドで済むのであれば、マルチプロセスにあえてする必要もないと思います。
この辺はそのプログラムの中身がわからないと何ともいえないのでkokopeさん自身の判断になると思います。
UNIXで組む時はマルチプロセスせざる得ないからしているのですし、
考え方次第だと思いますよ。
OKです。ありがとうございました。
失礼。
UNIXで組む時はマルチプロセスにせざる得ないからしているのですし、
ですね。
ちなみにマルチスレッドの方がデータのやり取りなどはずっと楽に出来ます。
もちろん排他処理が必要なところには排他処理を入れる必要がありますけれど。
マルチスレッドの場合、同一プロセス内のスレッド間ではグローバル領域が
共有されています。ただし、アクセスに排他処理が必要であれば、きちんと
排他処理を組み込んでやる必要はあります。
fork()と同等の機能を実現するのは、
http://www.sixnine.net/cygwin/translation/cygwin-ug-net/highlights.html
(1.6.7 プロセスの生成 を参照して下さい)
こういった記事が存在することを考えるとかなり無理があるのではないでしょうか。
マルチスレッドプログラムに変換できるならそうするのが無難だと思います。
ところで、
> Windowsだと、exec元のプロセスがなくなり、プロセスが2つにならないようです。
この仕様はUNIXでも同じハズですが。
すでに解決済みでしたね。チェックを見落していました。すみません。
元がプロセス前提なので、別領域になることを前提のコードもありえますし、
勝手にグローバルを共有することが幸せとは限らないわけですが。
UNIXでも普通はpthreadなり独自スレッドなりありますし。
# 一応、Cygwinってのも常套句ではありますが思いし個人的には使わない…
すいません、私がマルチプロセスしかやっていなかったので
そっちの方しか頭にありませんでした。
そういえば、最近はUNIXでシステム組んでないなぁと
すっかりWindowsの人になってしまった。(遠い目)
ツイート | ![]() |