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

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

新規登録して質問してみよう
ただいま回答率
85.48%
マルチスレッド

マルチスレッドは、どのように機能がコンピュータによって実行したのかを、(一般的にはスレッドとして参照される)実行の複合的な共同作用するストリームへ区分することが出来ます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1206閲覧

vb.net(2010)で他ユーザーとフィールドは競合するのですか?

akiras

総合スコア8

マルチスレッド

マルチスレッドは、どのように機能がコンピュータによって実行したのかを、(一般的にはスレッドとして参照される)実行の複合的な共同作用するストリームへ区分することが出来ます。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/02/15 00:24

編集2019/02/15 04:00

VB.NET(2010)でwebの親画面からバッチプログラムを起動しています。
起動先(子)ではフィールド定義しているのですが、これってWeb サーバーに同時アクセスしてくる多数のユーザーと競合(共有)してしまうのでしょうか?

#■質問
例、AさんとBさんが同時期に起動したとして・・・
・Aさんが実行 ("User-A")
・その後Bさんが実行 ("User-B")

 Q1. この場合、他のユーザーと変数を共有してしまうのでしょうか?
つまりAさんのstrUserIDの中身は"User-B"に変わっている?

 Q2. そもそもAさんとBさんは変数を共有しているのでしょうか?
個人的にはまったくの別物で、競合はしないと思うのですが・・・
同じPCならまだしも、別のパソコンからだし
これはマルチスレッドとは言わないと思うのですが

ご教授願います。

#■親

Dim DwnldBat As New MyChildClass() ' バッチプログラム
Dim DwnldThread As New Threading.Thread(New Threading.ThreadStart(AddressOf DwnldBat.Main))

'受け渡し情報
With DwnldBat
.strSyoriNo = Format(intNo, "000")
.strKaisiDT = dt.ToString("yyyy/MM/dd HH:mm:ss")
.strUserID = Session("UserId").ToString
.Path = Request.MapPath(Request.ApplicationPath & "/download")
End With
Sumtbl.Dispose()
DwnldThread.Start() '--- バッチプログラムの起動

#■子
Public Class MyChildClass
Public strUserID As String = ""   ' ユーザID
Public strSyoriNo As String = ""  ' 処理番号
Public strKaisiDT As String = ""  ' 開始日時
Private recNo As Long        'レコード番号

Public Sub Main()
・・・・・
end

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/02/15 01:09

「webの親画面」とは何ですか? ASP.NET Web アプリでサーバー上で動いている VB.NET のコードのことですか? とすると、「他のユーザー」とは何ですか? ブラウザで Web サーバーに同時アクセスしてくる多数のユーザーのことを言ってますか?
akiras

2019/02/15 03:55

質問ありがとうございます。 「他のユーザー」とは、ブラウザで Web サーバーに同時アクセスしてくる多数のユーザーを指します。
退会済みユーザー

退会済みユーザー

2019/02/15 05:23

であれば、競合が起こる可能性は十分あると思います。ユーザーID でユーザーを識別できるから他のユーザーとの競合は起こらないと考えているのかもしれませんが、例えば同一ユーザーがブラウザを 2 つ立ち上げてアクセスしてくるという状況を考えたらどうなりますか?
akiras

2019/02/18 00:07

質問ありがとうございます。 >同一ユーザーがブラウザを 2 つ立ち上げてアクセスしてくるという状況を考えたらどうなりますか? 上記は運用上NGとしてますが、実際ありえるのでその時は仕方がないという結論にいたっています。 つまり、フィールド変数さえ競合しなければ良しとしてます。 例 Public intCal As Integer=0 ・Aさん intCal=intCal + 50 ・Bさん intCal=intCal + 70 結果が下記であれば良しとうことになりました。 ・AさんのintCal→50 ・BさんのintCal→70 ※AさんとBさんのintCalが競合しなければ○ DB更新とか足しこむ処理があったとして、そこの不整合までは感知しないとしました。
guest

回答1

0

ベストアンサー

Threading.Threadによってマルチスレッドで子が起動されていますから、内部変数などの競合は考えなくても良いかと思います。

但し、その子が行っている何かによっては、競合を意識しなければなりません。
例えば、DBへの更新、ファイルへのI/Oなどは同じものにアクセスするなら考慮が必要です。

投稿2019/02/15 00:37

sazi

総合スコア25173

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

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

akiras

2019/02/15 03:49

ありがとうございます。 内部変数などの競合は考えなくてもいいのですね。 多分大丈夫だろうと思ってはいたのですが、いまひとつ自信がなかったので助かりました。 DB、ファイルへ等物理的なものは考慮済です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問