質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
排他制御

排他制御とは、特定のファイル・データへのアクセスや更新を制御することです。特にファイルやデータベースへ書き込みを行う際、データの整合性を保つため別のプログラムによる書き込みを一時的に制御することを指します。

Q&A

解決済

3回答

1091閲覧

排他制御でどちらが先か決まる条件

t.z

総合スコア21

排他制御

排他制御とは、特定のファイル・データへのアクセスや更新を制御することです。特にファイルやデータベースへ書き込みを行う際、データの整合性を保つため別のプログラムによる書き込みを一時的に制御することを指します。

0グッド

1クリップ

投稿2021/04/09 14:16

排他制御は、複数人が同時にプログラムを実行できないようにし、Aさんがプログラムを実行している場合はロックをしBさんはAさんの処理が終わるまで待つというものだと理解しました。

####質問1
AさんとBさんがまさに同時だったとして、どちらが先か決めるものはなんですか?電気屋さんの人気商品の予約や購入で数に制限があるとき、ほんの少しでも得する人はどういう条件で決まるのですか。

  • クリックした段階なのか、パソコンのスペック、ブラウザ、通信速度は関係があるのか
  • 本当の同時はあるか、どのぐらい細かい時間を処理可能なのか、どの細かさから無意味とされるのか

####質問2
アカウントIDは重複を許しませんが、登録画面では重複していないので使用できますと出ますが、その瞬間に同時に同じidが打たれた場合、そして登録ボタンが押された場合、どのような処理がされるのでしょうか。


そのあたりを教えていただけると嬉しいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

全く同じタイミングというのは無いです。

例えば、ネットワーク経由で受け付ける場合を考えると、複数のルーターから全く同時に到着すると両方ともリンク層でエラーになります。自動的にリトライするのでIP通信レベルではエラーにならないですが、リトライ時に乱数で待ち時間を決めます。なので、どっちが先に通信成功するかは乱数で決まります。
つまり、コンピューターへの入り口であるネットワークインターフェースの所で、シリアライズされます。
各ルーターにその1つ手前の複数ルーターから同時に到着した場合も同じです。

コンピューターに複数のネットワークインターフェースがある場合も、CPUに対して割り込みを掛ける優先順位が決まっているので、ここでも同時は無いです。

最近のハードウェアに疎いので正確で無い記述があるかも知れませんが、基本的には同じはずです。

複数のコンピューターが並列処理している場合も、特定のリソースの排他を管理するコンピューターは1つですので、そのコンピューターへの排他要求到着順になります。全く同時が無いのは上記の通り。

質問1:
AさんとBさんが全く同時にブラウザのボタンをクリックしたとしても、PC能力や、そこからサーバーへのネットワーク等が異なるので、特定のリソースの排他を管理するコンピューターへのリクエストタイミングには差が出ます。

質問2:
これはちょっと何を言ってるのか分かりませんが、「排他制御に穴は無いのか?」という質問であれば、「穴が無いように排他制御の仕組みを作ります」としか言いようが無いです。

投稿2021/04/09 15:56

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t.z

2021/04/09 16:18

全く同時がない仕組みがわかりました。質問2は、そこまで複雑な話だと思ってなかったときの疑問なので、結果話がずれました。アクセスカウンターやショッピングサイトの排他制御の記述と基本は同じという意味ですよね?ご回答ありがとうございました。
guest

0

同時、というのにこだわってらっしゃいますが、CPU一つの場合はそもそも同時などということはありえません。何事も順番に処理されます
また、マルチコアな場合でも、排他処理用に他のコアを待ちにさせて実行させるような命令やモードが用意されています。
ご心配には及びません

投稿2021/04/09 14:39

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t.z

2021/04/09 15:03

>CPU一つの場合はそもそも同時などということはありえません の部分がわからないのですが、詳しくお願いしてもいいですか。 同じショッピングサイトの同じ商品を購入するのに、0:00から販売開始と言われたらクリックは同時の人がたくさんいます。人気商品なら00秒まで同時のクリックがたくさんあるはずです。秒より1桁小さい00まで同時もありえる話だと思うのです。順番に処理されるのはわかるのですが、その順番を決めるのはなんですか。それとも、この世に全く同時はないという前提の話ですか?
y_waiwai

2021/04/09 19:54

例えば、スイッチ100個で早押し競争します CPUは、端から順番にスイッチの状態を見ていき、オンになったものを順番に取っていきます 100個のパケットが同時にやってくる、はずもなく、通信は交通整理されて一つづつ順番にやってきます まさしく、この世に同時ということはありえません
t.z

2021/04/10 09:45

そういうしくみになっているのですね。ありがとうございます。
guest

0

質問1、2共通の回答

プログラムの実装次第です。普通、これは設計者には見えない部分での処理です。

投稿2021/04/09 14:23

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t.z

2021/04/09 15:07

それはCPUのプログラムの実装次第ということですか?
HogeAnimalLover

2021/04/10 07:33

ハードウェアレベルのことを言えば、同時ということはまずないでしょう。仮に発生したとしてもエラー判定が筋です。
t.z

2021/04/10 09:46

そうなのですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問