• ベストアンサー

どうやって記述して答えればよいのか分からないので教えてください。よろし

どうやって記述して答えればよいのか分からないので教えてください。よろしくお願いします。 問題 以下の処理を行うトランザクションT1、T2、T3がある。 T1:データベース中の項目Aの値に1を加える。 T2:データベース中の項目Aの値を2倍にする。 T3:データベース中の項目Aに1をセットする。 T1、T2、T3を並行に実行するとする。項目Aが初期値0を持っているとすると、 これらの3つのトランザクションが終了したときに項目Aが取りうる可能性のあ る正しい値はどのくらいあるか、列挙せよ。 どうかお願いします((+_+))

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

T1,T2,T3を順列並び替えをして、並び替えた場合にAが幾つになるか地道に計算すれば解けるのでは? 並び替えは3!=6通りありますので、一つ一つ書いてもそんなに手間にはならないでしょう。 まぁ、出題者にわかればいいと思うので解答例はこんな感じでしょうか。 解答例 T1,T2,T3を並行に実行した場合にとりうるパターンは次の6通りある。 1) T1->T2->T3の場合 T1の処理後: A=0+1=1 T2の処理後: A=1*2=2 T3の処理後: A=1 よって、A=1。 2) T1->T3->T2の場合 ...(略)... 1)から6)より、 Aのとりうる可能性のある正しい値は、1,..(略)..。 以上。

xxxeyxxx
質問者

お礼

僕しか困っていない簡単な質問に丁寧に答えていただいて本当にありがとうござました。 そして丁寧に記述していただき感謝しています。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4855/10270)
回答No.2

どのあたりがわからないのでしょう?

xxxeyxxx
質問者

お礼

忙しいところすみませんでしたm(__)m 並列実行というのがどういう意味か先ほどまでは 分かっていなかったです。並列的に処理するので どのトランザクションの並びでもいいのですね。 遅くなりましたが、ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • トランザクションの考え方

    トランザクションの考え方を教えて下さい。 「データの参照や追加・更新・削除といった処理に矛盾がないことを保証する」という記述を見たのですが、下記の場合も良いのでしょうか。 トランザクションの開始 SELECT * FROM Aテーブル WHERE 項目A = '1' --処理-- UPDATE Aテーブル SET 項目B = '2' WHERE 項目A = '1' トランザクションの終了 開始から終了までの間に他のPCによって SELECT対象のデータが増える可能性があります。 この場合UPDATEするときはやはりSELECTの結果でLOOPするべきなのでしょうか。 上記のようにするとSELECT件数とUPDATE件数は異なってしまうのでしょうか。 環境はVB2005+SQL Server です。

  • 複数のSQL文を一つのトランザクションで行いたい(SQL Server)

    Visual Basic 2005 から SQL Server に接続してINSERTやUPDATE処理を行いたいのですが、トランザクション処理の記述方法が分かりません。 コネクションオープン トランザクション開始  クラスA呼び出し(INSERTやUPDATEの処理記述)  クラスB呼び出し(INSERTやUPDATEの処理記述)  … コミット(またはロールバック) トランザクション終了 コネクションクローズ 上記の様に、いくつかのクラスに分けて記述したINSERTやUPDATEの処理を、一つのトランザクションで行いたいです。 コネクションやトランザクションを引数とすればよいのでしょうか?

  • 平成23年 春期 基本情報技術者 午前 問19

    解説にある、「データベースサーバでは、1トランザクション当たり、データベースの 10 データブロックにアクセスする SQL が実行される。データブロックのアクセスに必要なデータベースサーバの CPU 時間は, 0.2 ミリ秒で、CPU 使用率の上限は、80%であるから、処理できるトランザクションの数は 400 件になる。 」で、なぜ400件になるのかがわかりません。 問題文から、1トランザクションにつき、0.2ミリ秒かかる。 ということは、2秒につき、300トランザクション処理する。 ということは、1秒ではその半分で、150トランザクション処理する。 ということは、150トランザクション×0.8(CPU 使用率の上限)=120トランザクションでは?? http://情報処理試験.jp/FE23a-am/k19.html

  • トランザクション

    データベースのトランザクションで Aというデータがあるとき begin から始まって end で終了ですが その間に read(A) write(A:A*100) という処理を行ったとき 実際にA*100が書き込まれるのは end したときなのか write したときなのか どちらですか?

  • JDBCでのトランザクション・排他制御

    初めまして。 まだ初心者の身なのですが質問させてもらいます。 サーブレット・jspでJDBCを使いデータベースとの処理を行って簡単なショッピングサイトのようなものを作っています。 まずsetAutocomit() = falseでトランザクションを開始し データベースのUPDATEを行って、最後に確定する場合comit キャンセルする場合rollbackとしています。 しかし1人のユーザーがトランザクションを行っている場合に他のユーザーからアクセスされた場合にデータベースのトランザクション中の値を取ってきたいのですが、どうしてもトランザクションでUPDATEされる前の値になってしまうのです。 これを防止するのが排他制御というものだというのは分かったのですが 実際のやり方については、結構調べたのですがあまり載っていませんでした。 データベースはMySQLを使っています。 よろしければJDBCでの排他制御についてのアドバイス、もしくは詳しく説明されているサイトなどございましたら是非教えてください。 よろしくお願いします。

  • 決められた時間間隔で処理を繰り返すvbsでの記述は?

    処理Aがあって、それを1時間ごとに繰り返し実行するにはどういう記述をすればよいのでしょうか?

  • 関数内の排他制御について

    いつも的確な回答に助けられていますm( __ __ )m 以下のようなメソッドがあるとします。 function test() { 処理1: データベースから値を取得 処理2: 処理1 で取得した値に +1 する 処理3: 処理2 の結果をデータベースに書き込む } 【質問】 関数 test がクライアント A と B の2人からほぼ同時にアクセスされた時、以下のような事が起きてしまうと思います。 ・ A が 処理1 を実行 ・ A が 処理2 を実行 ・ B が 処理1 を実行 ・ A が 処理3 を実行 ・ B が 処理2 を実行 ・ B が 処理3 を実行 当然データベースにある値は期待通りの値ではないと思います。 期待する動きとしては、A が関数 test の全ての処理を抜けるまで B は入り口で待機させるというようなことを想像しているのですが、 こういった場合、どのように排他制御したら良いのでしょうか? 私は C# で排他制御を実装した経験があるのですが、 C# では同期オブジェクトを用意して lock を使ったり、 ManualResetEvent などを用いることで排他制御が可能でした。 PHP でそれらに匹敵するようなものは存在するのでしょうか?

    • 締切済み
    • PHP
  • 本文ではなく、returnへほとんどの処理を記述

    ・本文ではなく、returnへほとんどの処理を記述しているコードがあります ・どういう意図があるのでしょうか? ・複数の関数をreturnする関数が、たくさんあります ・どの関数も、関数本文より、returnする関数内容の方が何倍も多いです hoge = function(){  //中略   return {    a : function(){   },    b : function(){  //これが延々続く  //return関数内で即時関数実行したり ■質問1 ・処理の結果をreturnすると思っていたのですが、returnメインでそこに処理を記述していくやり方のメリットは? ■質問2 ・hoge.aでアクセスしているのですが、関数定義=オブジェクト定義でしょうか? ・下記aメソッドは、同じ意味? hoge = {  a: function(){ hoge = function(){  //中略   return {    a : function(){   },

  • トランザクション中に別のトランザクションは開始できますか?

    DBはサイベースを使っています。初心者です。 以下のような動作をしているシステムの一部を改造することになりました。 1)カーソルAオープン 2)トランザクション開始 3)フェッチ 4)1トランザクションでの処理数分終了済みでなければ、3)から繰り返し 5)commit/rollback 6)終了済みでなければ 2)から繰り返し 7)カーソルAクローズ 今回、3)でフェッチしたレコードのある項目をキーとして 別のテーブルを検索しなければならないのですが、 3)の後に、カーソルBオープンとフェッチのみを追加しただけでは問題があると思うのですが、同一プロセスから、トランザクション中に別のトランザクションを開始することは可能なのでしょうか? なお、このトランザクションでは、レコードの追加や削除は行いません。 どうぞよろしくお願いいたします。

  • エクセルVBAの記述について

    OSはWin98、エクセル2000です。 次の処理をVBAで処理したいのですがうまく作動しま せん。 ご教授願います。 セルA1から下に向かって1から20までランダムに数 値が入ってます。 同じ数値は無く、数値も3行(セルA3)で終わる場合 も有ります。 この場合セルC1から下に向かって順にA1&A2、A 1&A3と記述したいのですが・・・ 例) A1に5、A2に7、A3に15、A4に10でしたら C1に57、C2に515、C3に510、C4に715 C5に710、以下・・・と記述 よろしくお願いします。m(_ _)m