初めての質問です。
マルチプロセスにおいてトランザクションを行おうとしています。
親プロセスA
から
子プロセスa
子プロセスb
が、起動され、それぞれで同じテーブルに対しDELETE,INSERTの処理を行います。
それらの処理において子プロセス毎にトランザクションを行いたいのですが、トランザクション対象となっているテーブルに対しては単一でのみ処理が動いているような挙動をします。
これは解決できないものなのでしょうか。
親プロセスA.php
public function main { while(true){ if(終了条件){ //親プロセス終了処理 } //子プロセス起動 } }
子プロセスab.php
public function main { // トランザクション開始 $dataSource = $this->モデルA->getDataSource(); $dataSource->begin(); //何らかの処理 //テーブルAに対する処理 if(失敗){ $dataSource->rollback(); } else { $dataSource->commit(); } }
上記のような条件の時に//何らかの処理
の位置まではマルチプロセスとして並列で実行されるのですが、//テーブルAに対する処理
に差し掛かるところで、あとからそこに到達した処理が止まります。
その位置で処理が止まる条件は、子プロセスaが//テーブルAに対する処理
を行っている際に子プロセスbが//テーブルAに対する処理
に至ることです。
なお、子プロセスaが//テーブルAに対する処理
を終了した時点で、子プロセスbの//テーブルAに対する処理
が開始され、それがループするような状態です。
これらの挙動に対して、私が実現したいことは子プロセスaと子プロセスbの//テーブルAに対する処理
が同時に動くなのですが、それは可能なのでしょうか。
拙い文章で申し訳ないですが、回答お待ちしております。
バージョン
MySQL5.5.62
CakePHP2
PHP5.3.3
回答2件
あなたの回答
tips
プレビュー