• ベストアンサー

アトミック・オペレーションについて

私は情報科学科に在籍している大学生です。 いま排他制御やセマフォを勉強しているのですが、その関係で下記のようなことも勉強しています。 アトミック・オペレーションはセマフォみたいなP()やV()のようなものでしょうか? ぜひ教えていただければ幸いです。 よろしくお願いします。 (1)アトミック・オペレーションを簡単に定義せよ。 (2)2つのスレッドT1とT2がそれぞれアトミック・オペレーションa、b、c、d、eを下記のように実行する場合、全ての可能な実行順序を記せ。 ・T1 : {a,b,c} ・T2 : {d,e}

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

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

(1) これ以上分割できない操作のこと。 http://hp.vector.co.jp/authors/VA000092/win32/standard-coding.htmlを参考にしてみてください。 これはCPUよりの話で、割り込みが発生しない操作単位のようです。 なのでセマフォのようなP操作V操作が必要ありません。 セマフォのような同期を取るOSの機能自体が必要ないものです。 自信はありませんが、あえて踏み込んで言いますと 1クロックで終わるような処理か、割り込み禁止フラグを 立てるような処理ということになるかと思います。 (2) (1)でいうと、 T1でaを実行しているとき、T2はdを実行しません。 T2でdを実行しているとき、T1はaを実行しません。 ○○a○○b○○c○○ abcの順番は決まっているので○のなかにdかeが入ります。 なので、 abcde abdce adbce dabce abdec adbec dabec adebc daebc deabc こうなるでしょうか。

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

関連するQ&A

  • セマフォとスレッドの問題について

    この問題は東京大学大学院の問題なのですが、問題の求めているものがよくわかりません。 セマフォとスレッドなどは勉強して理解しているのですがこの問題はどのようにして解くのでしょうか? 8つのスレッドT1,T2,・・・,T8がある。それぞれのスレッドTiはステートメントSi()を実行するが、Sj()に関連付けされたセマフォSjのオペレーションP(Sj),V(Sj)などを利用して同期・排他制御を行う。(i,j=1,・・・,8)。ステートメントSi間の実行順序に添付した図のような依存性がある場合、それぞれのスレッドTiが実装する同期方法をSi(),P(Sj),V(Sj)などを用いて説明せよ(i,j=1,・・・,8)。 例えば、S1()はS2()とS3()より前に実行する必要があるが、S2()とS3()は同時実行可能である。また、S7()はS4()とS5()が終了しないと実行できない。全てのセマフォは初期化されていると仮定してよい。

  • エクセルの関数で2つの条件に合うものを探す。

    エクセルの関数で下記のことをしたいのです。 表(1) T>=0.6  0.6>T>=0.3  0.3>T>=0.15 U<2   A     B       C 2<=U<3  B     B-C     D 3<=U<4  C      C      D 4<=U<6  D     C-D     D 6<=U    E      D      D 別の表(2)に U   T         1.5  0.3         0.9  0.8             5.9  0.13         ・   ・         ・   ・ とあります。 そのためUの値とTの値で表(1)のAからE値を抽出し別の表にAからEを表示したいのです。エクセルの関数(IF,AND,LOOKUP等)を試してみたのですがうまくいきません。できるだけエクセルの関数のみで、よい方法があれば教えてください。よろしくおねがいします。     

  • 【エクセル】重複データ抽出時にうまくいかない

    エクセル2003で、[データ]→[フィルタ]→[フィルタオプションの設定]で下記のように 設定して重複データを省きました、 ・「指定した範囲」にチェック ・「リスト範囲」に$A$1:$A$13を入力。 ・「抽出範囲」に$B$1を入力 ・「重複するレコードは無視する」にチェック の条件で実行すると。 [元データ]  A列 1 a 2 a 3 b 4 b 5 c 6 c 7 c 8 d 9 d 10 d 11 e 12 e 13 e が [フィルタ実行後]  A列  B列 1 a  a 2 a  a 3 b  b 4 b  c 5 c  d 6 c  e 7 c 8 d 9 d 10 d 11 e 12 e 13 e の様にB列でaが2つ出てしまいます。 なにが原因でしょうか?

  • スレッドの優先順位に関して

    ただ今、黒本(徹底攻略 Java2 プログラマ問題集 Platform5.0 対応) を使用しSJC-Pの勉強をしているんですが、スレッドの20番目の問題が どうしてもわからないので質問させて下さい。 下記の問題なんですが コンパイルし実行した結果として正しい物を選ぶという 問題で、答えは「 B A B A B A と表示される」になります。 class MyThread extends Thread{ MyThread(String name){ super(name); } public void run(){ System.out.println(getName()); for(int i=0;i<2;i++){ try{ sleep(1000); }catch(Exception e){} yield(); System.out.println(getName()); }}} class T20{ public static void main(String[] args){ Thread t1 = new MyThread("A"); t1.setPriority(1); t1.start(); Thread t2 = new MyThread("B"); t2.setPriority(10); t2.start(); } } この問題の答えの解説で 優先順位を指定すると必ず高い優先順位のスレッドから 実行が開始するみたいな事が書かれてて、おかしいと思い、 検証してみたところ、私の環境では、結果が何通りも表示されました。 yield()についても私の持っている別の参考書には 「現在実行中のスレッドオブジェクトを実行可能状態に戻し、 他のスレッドに実行できるようにする。ただし優先順位の関係で実行中だったスレッドが再度実行される可能性もある。」 と書かれていて上記の答えに納得が出来ていません。 スレッドの優先順位とyieldに関して お手数ですが、アドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • 論理式

    f=AB+¬(C(D+E))の乗法標準形の求め方を過程つきで教えてください! あと、(A◎B◎C)^d=A◎B◎Cの証明もどうかよろしくお願いします! ちなみに◎は排他論理和記号です。

  • 線形代数 連立方程式

    連立方程式の問題なのですが、方向性はわかっていると思うのですが、うまい形にもっていけません。教えてください。 次の連立方程式が解を持つようにtを定め、そのときの解を答えよ。 a-2b+2c-d+2e=2 4a-9b+8c-2d+7e=8 3a-7b+4c-d+7e=t a-2b+3c-d-e=2

  • 4次方程式の解

    この度はよろしくお願いいたします。 題名のとおりで 次のサイト様 ttp://www.akamon-kai.co.jp/yomimono/kai/kai.html の計算方法(フェラーリの公式)を用いて4次方程式を 代数的に解こうとしたのですが初めてプログラムをしたに等しいので うまく解が出てきてくれません。 見にくいとは思いますがプログラムを以下に示しますので どこを直せばよいかの修正方法・もしくは他の方法がありましたらどうかよろしくお願いします。 use Math::Complex; # 定数の入力 print "aの値は?\n"; $a = <STDIN>; print "bの値は?\n"; $b = <STDIN>; print "cの値は?\n"; $c = <STDIN>; print "dの値は?\n"; $d = <STDIN>; print "eの値は?\n"; $e = <STDIN>; # ω・p1~p3の式 $j = (-1 + sqrt(-3))/2; $k = (-1 - sqrt(-3))/2; $f = -8*$a*$c+3*$b*$b; $g = -72*$a*$c*$e+27*$a*$d*$d+27*$b*$b*$e-9*$b*$c*$d+2*$c*$c*$c; $o = -256*$a*$a*$a*$e*$e*$e+192*$a*$a*$b*$d*$e*$e+128*$a*$a*$c*$c*$e*$e-144*$a*$a*$c*$d*$d*$e; $p = 27*$a*$a*$d*$d*$d*$d-144*$a*$b*$b*$c*$e*$e+6*$a*$b*$b*$d*$d*$e+80*$a*$b*$c*$c*$d*$e; $q = -18*$a*$b*$c*$d*$d*$d-16*$a*$c*$c*$c*$c*$e+4*$a*$c*$c*$c*$d*$d+27*$b*$b*$b*$b*$e*$e; $r = -18*$b*$b*$b*$c*$d*$e+4*$b*$b*$b*$d*$d*$d+4*$b*$b*$c*$c*$c*$e-$b*$b*$c*$c*$d*$d; $h = $o + $p + $q + $r; # xの3乗根を指数対数で表した式 $s = exp(log($g+3*sqrt(3*$h)/3)); $t = exp(log($g-3*sqrt(3*$h)/3)); # 解 $x1 = 1/(12*$a)*(-3*$b+sqrt(3*($f+2*$a*($s+$t)))+sqrt(3*($f+2*$a*($j*$s+$k*$t)))+sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x2 = 1/(12*$a)*(-3*$b+sqrt(3*($f+2*$a*($s+$t)))-sqrt(3*($f+2*$a*($j*$s+$k*$t)))-sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x3 = 1/(12*$a)*(-3*$b-sqrt(3*($f+2*$a*($s+$t)))+sqrt(3*($f+2*$a*($j*$s+$k*$t)))-sqrt(3*($f+2*$a*($k*$s+$j*$t)))); $x4 = 1/(12*$a)*(-3*$b-sqrt(3*($f+2*$a*($s+$t)))-sqrt(3*($f+2*$a*($j*$s+$k*$t)))+sqrt(3*($f+2*$a*($k*$s+$j*$t)))); # 解が成立する時の条件 if($s*$t == 4*(12*$a*$e-3*$b*$d+$c*$c) , sqrt(3*($f+2*$a*($s+$t)))*sqrt(3*($f+2*$a*($j*$s+$k*$t)))*sqrt(3*($f+2*$a*($k*$s+$j*$t))) == 27*(-8*$a*$a*$d+4*$a*$b*$c-$b*$b*$b )){ print $x1 , "\n"; print $x2 , "\n"; print $x3 , "\n"; print $x4 , "\n"; } else{break;}

  • データを比較したいのですがよい方法がありますでしょうか?

    データを比較したいのですがよい方法がありますでしょうか? DF(フリーソフト)でしてはみたのですがどうもうまくいきません。 エクセルもしくはエディタのマクロ等でできますでしょうか。 下記はサンプルです。実際のデータは5,000件ほどあり、項目もたくさんあります。 差異を見るだけでなく、該当レコードを出力したいのですが。 (昨年) 101,A,B,C,D,E 102,A,B,C,D,F 103,A,B,C,G,E 104,A,H,C,D,E 105,I,B,C,D,E 106,I,B,J,D,E 107,A,K,C,D,E 108,A,B,C,L,E 109,A,B,C,D,M 110,N,B,C,D,E (今年) 101,A,B,C,D,E 102,A,B,C,P,F 103,A,B,C,G,E 104,Q,H,C,D,E 105,I,B,C,D,E 107,A,K,R,D,E 108,A,S,C,L,E 109,A,B,C,D,M 110,N,B,C,D,T 111,U,B,C,D,E ●結果 同じ 101,A,B,C,D,E 103,A,B,C,G,E 105,I,B,C,D,E 109,A,B,C,D,M 昨年にあって今年にないデータ 106,I,B,J,D,E 今年にあって昨年にないデータ 111,U,B,C,D,E 相違データ 102,A,B,C,P,F 104,Q,H,C,D,E 107,A,K,R,D,E 108,A,S,C,L,E 110,N,B,C,D,T

  • ギターの楽譜の繰り返し順序を教えてくださ

    ギターの(演歌の)楽譜の繰り返し順序を教えてください。 A スタート B 最初には||:とS(セーニョ)  最後にはto_Coda C 最初には「1 最後には:|| D 最初には「2 最後にはD.S E 最初に Coda ・・・・とあります。 A,B,C,D,E の繰り返し順序を教えてください。

  • 長文、有限のものの表現の仕方、集合・多重集合・文字列(順序対)

    有限のものがあったとします。 ・重複を許さない、順序を考えない、とします。 たとえば、aとbとcというものがあったとします。 これを表すのには、集合の記号を用いて、 {a,b,c} と表します。 ・重複を許す、順序を考える、とします。 たとえば、a,b,b,aという順にものがあったとします。 これは順序対の記号を用いて、 (a,b,b,a) と表すと思います。 また、文字列とみなして、 abba と表すこともあると思います。0から9の数字と+-記号を用いて、整数を表すのもこれに相当するとおもいます。 順序対の記号は、たとえば http://oshiete1.goo.ne.jp/qa2861763.html にあるように、集合の記号によって定義することもできます。 質問1.では逆に、集合の記号を、順序対の記号によって定義することはできるのでしょうか? ・重複を許す、順序を考えない、とします。 たとえば、aが2個、bが3個、cが1個というものがあったとします。 これは多重集合の考え方ですが、 {|aa,bbb,c|} と表したりするようです。 質問2.多重集合を、集合の記号や順序対の記号を用いて、うまく表すことはできないものでしょうか? ・重複を許さない、順序を考える、とします。 たとえば、a,c,b,d,eという順にものがあったとします。 質問3.しかし、この考え方の具体的な名前、応用例、表し方を知らないので、教えていただきたいのです。 それは順序対の記号を用いて、 (a,c,b,d,e) と表せばいいという方がいるかもしれませんが、その記号だと、重複を許さないという考えを伝えることができないので、よくはないと思うのです。