!extend:checked:vvvvv:1000:512
!extend:checked:vvvvv:1000:512
次スレを立てる時は↑を3行冒頭に書くこと(1行分は消えて表示されない為、もう1行は予備)
「どんなにくだらないC#プログラミングやVisual C#の使い方に関する質問でも誰かが優しくレスをしてくれるスレッド」です。
他のスレッドでは書き込めないような低レベルな質問、質問者自身なんだか意味がよく分からない質問、ググろうにもキーワードが分からないなど、勇気をもって書き込んでください。
内容に応じて他スレ・他板へ行くことを勧められることがあります。ご了承下さい。なお、テンプレが読めない回答者、議論をしたいだけの人は邪魔なので後述のC#相談室に移動して下さい。
C#に関係の無い話題や荒らしの相手や罵倒レスや酔っぱらいレスはやめてください。見かけたらNGしましょう。相手してしまったらあなたも荒らしです
>>980を踏んだ人は新スレを建てて下さい。>>980が無理な場合、話し合って新スレを建てる人を決めて下さい。
■前スレ
ふらっと C#,C♯,C#(初心者用) Part158
https://mevius.5ch.net/test/read.cgi/tech/1679783460/
■関連スレ
C#, C♯, C#相談室 Part97
https://mevius.5ch.net/test/read.cgi/tech/1671585518/
■コードを貼る場合は↓を使いましょう。
https://ideone.com/
https://dotnetfiddle.net/
初心者はまずVisual Studioを使いましょう。なおVisual Studioの使い方などに関しては各バージョンで違うので専用スレでお願いします
http://www.visualstudio.com/downloads/
■情報源
https://learn.microsoft.com/ja-jp/dotnet/standard/class-libraries
https://learn.microsoft.com/ja-jp/dotnet/csharp/language-reference/
https://learn.microsoft.com/en-us/dotnet/standard/class-libraries
https://referencesource.microsoft.com/
https://source.dot.net/
・Insider.NET > .NET TIPS - @IT
https://www.atmarkit.co.jp/ait/subtop/features/dotnet/dotnettips_index.html
・DOBON.NET .NET Tips
https://dobon.net/vb/dotnet/index.html
++C++; // 未確認飛行 C
https://ufcpp.net/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
探検
ふらっと C#,C♯,C#(初心者用) Part159
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 6fe5-uQHI)
2023/08/08(火) 09:21:19.30ID:aeM2XQJJ0529デフォルトの名無しさん (ワッチョイ 0b16-vgKx)
2023/11/02(木) 20:05:34.94ID:1Z+krstx0530デフォルトの名無しさん (ワッチョイ eb10-H9h+)
2023/11/02(木) 21:05:57.33ID:bF76OlLL0 「xaml static」でググるだけでも↓とか見つかるよ
https://learn.microsoft.com/ja-jp/dotnet/desktop/xaml-services/xstatic-markup-extension
https://shuhelohelo.hatenablog.com/entry/2019/11/29/001200
https://www.nuits.jp/entry/xaml-static-binding
(すまんがスラッシュは半角に変換してくれ……)
https://learn.microsoft.com/ja-jp/dotnet/desktop/xaml-services/xstatic-markup-extension
https://shuhelohelo.hatenablog.com/entry/2019/11/29/001200
https://www.nuits.jp/entry/xaml-static-binding
(すまんがスラッシュは半角に変換してくれ……)
531デフォルトの名無しさん (ワッチョイ 1b2f-eepm)
2023/11/03(金) 14:30:46.23ID:rKkfliCa0 constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
532デフォルトの名無しさん (ワッチョイ 1b2f-eepm)
2023/11/03(金) 14:30:58.24ID:rKkfliCa0 constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
533デフォルトの名無しさん (ワッチョイ 5374-OMHE)
2023/11/03(金) 15:44:06.59ID:olK1WazS0 constはコンパイル時解決
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
readonlytついてても変数は実行時解決
xamlは知らんが、dllとか作ると問題になるときがある
534デフォルトの名無しさん (ワッチョイ 5374-OMHE)
2023/11/03(金) 15:44:31.98ID:olK1WazS0 大事なことなので3回言いました。
535デフォルトの名無しさん (ワッチョイ 068b-/9BA)
2023/11/04(土) 16:36:18.05ID:zFKBPz8N0 排他制御のlock()の中って適当なobject型いれていいんですかね
この理屈がいまいち分かりません、おまじないみたいな認識でおkですか?
この理屈がいまいち分かりません、おまじないみたいな認識でおkですか?
536デフォルトの名無しさん (ワッチョイ c2e5-wdyj)
2023/11/04(土) 18:06:17.74ID:Piez7dab0 ダメ
537デフォルトの名無しさん (ワッチョイ 62f5-UfbY)
2023/11/04(土) 18:37:44.75ID:h505bWOx0 プログラムにおまじないなんかねぇーよ
538デフォルトの名無しさん (ワッチョイ 4279-ztC3)
2023/11/04(土) 19:11:44.76ID:W1fOq5zR0 何も判ってないみたいだしマルチスレッド入門サイト的な所か本を一通り読んだ方がいいよ
プラットフォーム毎に少しやり方が違うだけだからC#に限らない
プラットフォーム毎に少しやり方が違うだけだからC#に限らない
539デフォルトの名無しさん (オイコラミネオ MM49-wdyj)
2023/11/04(土) 19:31:09.98ID:RNqT3ZjLM540デフォルトの名無しさん (ワッチョイ 0642-+qK8)
2023/11/04(土) 20:01:30.54ID:hziOgXuw0 おまじないはあるよ
絶対はいらないエラー検査ロジックを書いておくと
修正でミスってもバグらないことがある
絶対はいらないエラー検査ロジックを書いておくと
修正でミスってもバグらないことがある
541デフォルトの名無しさん (ワッチョイ 62f5-UfbY)
2023/11/04(土) 21:05:19.08ID:h505bWOx0 そういうロジックにハイルだけ
ぉ前の知らんとこで入っでるだ
ぉ前の知らんとこで入っでるだ
542デフォルトの名無しさん (ワッチョイ c2e5-wdyj)
2023/11/06(月) 14:35:53.28ID:uDRsGne/0 何人だよお前w
543デフォルトの名無しさん (ワッチョイ dd5f-ZTan)
2023/11/07(火) 14:28:59.04ID:yst4YU0a0 ListboxでCtrl+C押すとCから始まる要素に選択が移るの無効化する方法はありますか?
というかCtrl+任意のアルファベットでそれから始まる要素を順番で選択していくよくわからない仕様
というかCtrl+任意のアルファベットでそれから始まる要素を順番で選択していくよくわからない仕様
544デフォルトの名無しさん (スプッッ Sdc2-hcR4)
2023/11/07(火) 15:25:13.30ID:Pq/Tl9vhd PrviewKeyDownかな
545デフォルトの名無しさん (スププ Sd62-VAE4)
2023/11/07(火) 16:53:35.09ID:XhD41j9dd マルチやめろ
546デフォルトの名無しさん (ワッチョイ dd5f-ZTan)
2023/11/07(火) 21:29:35.15ID:yst4YU0a0 ごめんなさい初心者スレで聞けみたいなのが合ったのでこっちにも質問しました
解決したんですけどもう一つ疑問があってビルドしたときに〇〇.exe.configってファイルができるんですけどこれに個人情報などは含まれたりしないですかね。
publicKeyTokenとか書いてあるんですけど他人に見られても問題ないようなものですか?
解決したんですけどもう一つ疑問があってビルドしたときに〇〇.exe.configってファイルができるんですけどこれに個人情報などは含まれたりしないですかね。
publicKeyTokenとか書いてあるんですけど他人に見られても問題ないようなものですか?
547デフォルトの名無しさん (ワッチョイ 6d09-fzVy)
2023/11/08(水) 12:51:28.99ID:4rFdbjcs0 >>546
脳みその量が足りない人はプログラミングとかしない方が良いと思うよ
脳みその量が足りない人はプログラミングとかしない方が良いと思うよ
548デフォルトの名無しさん (ワッチョイ 0697-/9BA)
2023/11/08(水) 21:55:40.45ID:wPZy88vc0 lockについての質問したやつです
おまじないでないことは漸く理解できました
次なんですが
lockによって排他制御されるものは変数だけですか?
ファイルへのアクセスも排他制御したいです
例えばスレッド2つ走らせてA.txtを同時に読み込もうとしたときに
どっちかのスレッドがリジェクトされたら成功ってな感じにしたいです
どうやって状況つくります?
おまじないでないことは漸く理解できました
次なんですが
lockによって排他制御されるものは変数だけですか?
ファイルへのアクセスも排他制御したいです
例えばスレッド2つ走らせてA.txtを同時に読み込もうとしたときに
どっちかのスレッドがリジェクトされたら成功ってな感じにしたいです
どうやって状況つくります?
549デフォルトの名無しさん (ワッチョイ b1f8-wwCg)
2023/11/08(水) 22:08:02.38ID:/gqdz8KH0 ファイル排他はlookでは無理だねぇ
550デフォルトの名無しさん (ワッチョイ 4279-ztC3)
2023/11/08(水) 22:11:21.15ID:5o5qiXKK0 ほれ
using System;
using System.IO;
using System.Threading;
class Program {
static void ReadFile(string filename) {
int threadId = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"Thread {threadId} is reading {filename}");
lock (filename) {
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
using (StreamReader reader = new StreamReader(fs)) {
string data = reader.ReadToEnd();
Console.WriteLine($"Thread {threadId} read: {data}");
}
}
}
}
static void Main() {
string filename = "A.txt";
Thread thread1 = new Thread(() => ReadFile(filename));
Thread thread2 = new Thread(() => ReadFile(filename));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
}
using System;
using System.IO;
using System.Threading;
class Program {
static void ReadFile(string filename) {
int threadId = Thread.CurrentThread.ManagedThreadId;
Console.WriteLine($"Thread {threadId} is reading {filename}");
lock (filename) {
using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read)) {
using (StreamReader reader = new StreamReader(fs)) {
string data = reader.ReadToEnd();
Console.WriteLine($"Thread {threadId} read: {data}");
}
}
}
}
static void Main() {
string filename = "A.txt";
Thread thread1 = new Thread(() => ReadFile(filename));
Thread thread2 = new Thread(() => ReadFile(filename));
thread1.Start();
thread2.Start();
thread1.Join();
thread2.Join();
}
}
551デフォルトの名無しさん (ワッチョイ 0621-/9BA)
2023/11/08(水) 22:44:34.72ID:wPZy88vc0 >>550
うんん?どこに仕掛けがあるの
うんん?どこに仕掛けがあるの
552デフォルトの名無しさん (ワッチョイ 4279-ztC3)
2023/11/08(水) 22:57:10.85ID:5o5qiXKK0 知らん眠い
後は自分で直して遊んでね
後は自分で直して遊んでね
553デフォルトの名無しさん (スップ Sd62-uaP8)
2023/11/09(木) 00:12:36.42ID:+ZNjn+w4d 聞く方も答える方も馬鹿
ファイルはそもそも排他機能があるだろ
ファイルはそもそも排他機能があるだろ
554デフォルトの名無しさん (ワッチョイ c2e5-wdyj)
2023/11/09(木) 08:04:59.33ID:oWEPbbig0 おまじないでは無いことが理解できたとしても、結局lockがどういう機能かは全然理解してない感じやな
ファイルアクセスを排他制御したいなら↓使っとけ
FileShare.None指定すれば完全排他だ
File.Open(string path, FileMode mode, FileAccess access FileShare share)
File.Openをnew FileStreamにしても一緒
ファイルアクセスを排他制御したいなら↓使っとけ
FileShare.None指定すれば完全排他だ
File.Open(string path, FileMode mode, FileAccess access FileShare share)
File.Openをnew FileStreamにしても一緒
555デフォルトの名無しさん (アウアウウー Saa5-CWlg)
2023/11/09(木) 11:48:42.57ID:Fo7n9qIpa reject されたら失敗やん?
556デフォルトの名無しさん (ワッチョイ b156-dElW)
2023/11/09(木) 12:00:00.13ID:Qu68QkTK0 1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる理由や状況によってどういうアーキテクチャがいいかは変わる
557デフォルトの名無しさん (ワッチョイ c2e5-wdyj)
2023/11/09(木) 12:54:41.26ID:oWEPbbig0 そもそも「1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる」かどうかわからんのだが
558デフォルトの名無しさん (ワッチョイ c2e5-wdyj)
2023/11/09(木) 12:55:39.07ID:oWEPbbig0 例えばじゃなくて実際どう作ってるのか言ってくれないとなぁ
559デフォルトの名無しさん (ワッチョイ b156-dElW)
2023/11/09(木) 14:28:35.71ID:Qu68QkTK0 > 例えばスレッド2つ走らせてA.txtを同時に読み込もうとしたときに
額面通りに受け取れば「1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる」
まあ本当に解決したい問題と書いてる内容が合ってるとは限らないけどね
額面通りに受け取れば「1つのプログラムの複数スレッドで同時に1つのファイルを読み込もうとしてる」
まあ本当に解決したい問題と書いてる内容が合ってるとは限らないけどね
560デフォルトの名無しさん (ワッチョイ 6df0-q0f1)
2023/11/09(木) 14:43:43.38ID:b1R9Hs+L0 ファイル読む分には同時だろうが関係ないよな?
ライブラリがリエントラントになってればだけどw
ライブラリがリエントラントになってればだけどw
561デフォルトの名無しさん (ワッチョイ b1be-dElW)
2023/11/09(木) 16:45:55.75ID:R7Sf/2Of0 ファイルの内容を1度しか処理したくない
みたいな別の理由があるんじゃね?
みたいな別の理由があるんじゃね?
562デフォルトの名無しさん (ワッチョイ d2bd-/9BA)
2023/11/09(木) 18:51:49.12ID:3GBMooqu0 希望の通りに実装したら、同時に読み込もうとしたら後の方は先の読込み結果を返すになる。甘々に希望を読めば。
だけれども、同時でなくて後からもう一回呼んだ場合にはもう一度ファイルを読み込むんだよな。
>>561の通りに一度しか読み込みたくないのかもしれず、後から呼んだ場合には前の結果を
残しておいてそれを使うのがいいケースもあるが、それだとメモリを食い続けるという問題も
あるので、何をしたいか次第だ。
だけれども、同時でなくて後からもう一回呼んだ場合にはもう一度ファイルを読み込むんだよな。
>>561の通りに一度しか読み込みたくないのかもしれず、後から呼んだ場合には前の結果を
残しておいてそれを使うのがいいケースもあるが、それだとメモリを食い続けるという問題も
あるので、何をしたいか次第だ。
563デフォルトの名無しさん (ワッチョイ 2e10-wdyj)
2023/11/09(木) 18:54:11.91ID:dtnjnmBG0 同一プロセス別スレッドで同一ファイルへのアクセスを排他制御したいなら
lockブロックの中にファイル処理入れるしかないんじゃね?
lockブロックの中にファイル処理入れるしかないんじゃね?
564デフォルトの名無しさん (ワッチョイ 2e10-wdyj)
2023/11/09(木) 18:55:43.66ID:dtnjnmBG0565デフォルトの名無しさん (ワッチョイ 62f5-UfbY)
2023/11/09(木) 18:57:46.82ID:Mwi0lSOi0 まあ普通はファイル自体はロックしないで
レコードロックじゃね
レコードロックじゃね
566デフォルトの名無しさん (オイコラミネオ MM49-wdyj)
2023/11/09(木) 19:01:49.30ID:RZ9WOZDMM 550は全く実用的ではないけどまあそのうち気が付くんだろうな・・・
567デフォルトの名無しさん (ワッチョイ 4d42-+qK8)
2023/11/09(木) 19:29:43.00ID:yc1G0XhC0 俺ならファイルを読み込むスレッドを一つにして、ひたすらqueueなどに積んで
処理用のたくさんのスレッドでそれを個別に読み込み処理なんて考えるな
ファイル読み込み部分を並列処理してもトラブルが出るだけでろくなことにならない
処理用のたくさんのスレッドでそれを個別に読み込み処理なんて考えるな
ファイル読み込み部分を並列処理してもトラブルが出るだけでろくなことにならない
568デフォルトの名無しさん (オイコラミネオ MM49-wdyj)
2023/11/09(木) 19:34:43.74ID:RZ9WOZDMM 一応書いておくけど~
文字列でlockするのは全くおすすめできない
なぜならデッドロックの恐れがあるから
それとパスを使うなんて論外だな
文字列でlockするのは全くおすすめできない
なぜならデッドロックの恐れがあるから
それとパスを使うなんて論外だな
569デフォルトの名無しさん (ワッチョイ 4279-ztC3)
2023/11/09(木) 20:53:01.49ID:qzya0pVE0 一体いつから正解が貼られると錯覚していた?と続けようとしたら眠くなっただけだからね
あー釣れた釣れた
あー釣れた釣れた
570デフォルトの名無しさん (ワッチョイ 62f5-UfbY)
2023/11/09(木) 20:57:33.11ID:Mwi0lSOi0 そりゃそーだ
優しくレスするスレやもん
優しくレスするスレやもん
571デフォルトの名無しさん (ワッチョイ 4601-4YU8)
2023/11/09(木) 21:25:44.13ID:Guim9pgh0 >>569
言い訳乙
言い訳乙
572548 (ワッチョイ ffda-XI6K)
2023/11/11(土) 09:48:46.02ID:MfZ2/qTS0 やりたいのは
計算結果をテキストに書くってのがやりたいです。
A,Bスレッドがそれぞれ計算します。
KeisanKekka.txt
↓↓
KeisanKEKKAA
KeisanKeKKAB
順番が逆になるってのはダメです。なのでファイル排他必要です。
計算結果をテキストに書くってのがやりたいです。
A,Bスレッドがそれぞれ計算します。
KeisanKekka.txt
↓↓
KeisanKEKKAA
KeisanKeKKAB
順番が逆になるってのはダメです。なのでファイル排他必要です。
573デフォルトの名無しさん (ワッチョイ 7f3f-vmna)
2023/11/11(土) 09:55:37.59ID:7zFGiPDR0 >>572
何の順番?
何の順番?
574デフォルトの名無しさん (ワッチョイ ffda-XI6K)
2023/11/11(土) 09:56:22.71ID:MfZ2/qTS0575デフォルトの名無しさん (ブーイモ MMd3-3/qp)
2023/11/11(土) 10:17:38.60ID:6SW4sVwrM XY問題の匂いが漂う
576デフォルトの名無しさん (ワッチョイ 7fbd-XI6K)
2023/11/11(土) 10:43:59.03ID:B6ZfAYMe0577デフォルトの名無しさん (ワッチョイ 7ff5-1DlE)
2023/11/11(土) 10:49:32.88ID:RSKqgUUO0 順番ってスレッドが開始した早い方が先に書き込むのか?
それともどちらもが出した計算結果の昇順に書き込むのか?
もし後者なら書込みプロセスは1つにするだけ
前者なら計算終わるの待つだけ
それともどちらもが出した計算結果の昇順に書き込むのか?
もし後者なら書込みプロセスは1つにするだけ
前者なら計算終わるの待つだけ
578デフォルトの名無しさん (ワッチョイ 9f42-/zbX)
2023/11/11(土) 11:21:39.38ID:vbI3i7Vz0 ・ファイルの書き込み自体は並列化出来ない
・計算に比べてファイル書き込みが圧倒的に遅い
・ファイルの排他処理自体も少しではあるが時間がかかる
ってことなので、素直にシングルスレッドで処理した方がいい
どうしても並行処理をやってみたいのなら、ファイル書き込みと計算の2つのスレッドで並行処理をしてみるべきかな
そうするとファイルI/O街のタイミングで計算できるから物凄く微妙に速度が上がるかもしれない
・計算に比べてファイル書き込みが圧倒的に遅い
・ファイルの排他処理自体も少しではあるが時間がかかる
ってことなので、素直にシングルスレッドで処理した方がいい
どうしても並行処理をやってみたいのなら、ファイル書き込みと計算の2つのスレッドで並行処理をしてみるべきかな
そうするとファイルI/O街のタイミングで計算できるから物凄く微妙に速度が上がるかもしれない
579デフォルトの名無しさん (ワッチョイ 7ff5-1DlE)
2023/11/11(土) 11:27:11.95ID:RSKqgUUO0 てか計算結果でソートするなら
処理分けてオペレーションで対応すりゃよくね?
無理やりプログラムでやるもんでもないでしょ
プログラムはなるべくシンプルがいいよ
処理分けてオペレーションで対応すりゃよくね?
無理やりプログラムでやるもんでもないでしょ
プログラムはなるべくシンプルがいいよ
580デフォルトの名無しさん (ワッチョイ ffda-XI6K)
2023/11/11(土) 11:27:33.55ID:MfZ2/qTS0581デフォルトの名無しさん (ワッチョイ 7f94-gzdM)
2023/11/11(土) 11:53:52.65ID:wxiCP7Qj0 >>580
排他制御だと先着順にしかならないけど
スレッドがA,Bの順番で計算が終わってファイルに書こうとする保証はあるの
それが保証されるなら、ファイルの排他機能を使うより、lockを使うのがシンプルで良いと思う
排他制御だと先着順にしかならないけど
スレッドがA,Bの順番で計算が終わってファイルに書こうとする保証はあるの
それが保証されるなら、ファイルの排他機能を使うより、lockを使うのがシンプルで良いと思う
582デフォルトの名無しさん (ワッチョイ ffda-XI6K)
2023/11/11(土) 12:18:07.23ID:MfZ2/qTS0 >>581
Aが書き終わったことが見てわかる変数を作っておくことで対応します。
Aが書き終わったことが見てわかる変数を作っておくことで対応します。
583デフォルトの名無しさん (ワッチョイ ff01-vmna)
2023/11/11(土) 12:48:18.44ID:9HxScUhQ0 これはもう手に負えないわ
諸君の健闘を祈る
諸君の健闘を祈る
584デフォルトの名無しさん (ワッチョイ 7f79-l6lv)
2023/11/11(土) 12:56:28.59ID:JXC3KAMY0 そもそも同一ファイルを複数スレッドで読み書きするのは公立が良くない
私立にしなさい
私立にしなさい
585デフォルトの名無しさん (ワッチョイ ffda-XI6K)
2023/11/11(土) 13:07:33.16ID:MfZ2/qTS0 伝え方が悪くてどうもすいませんでした
冷静に考えたら変数使えば排他制御いらないじゃんって思えてきた
何を聴講してんだか
冷静に考えたら変数使えば排他制御いらないじゃんって思えてきた
何を聴講してんだか
586デフォルトの名無しさん (ワッチョイ ffcf-Zoup)
2023/11/11(土) 13:44:16.19ID:LlCaH/Ey0 排他制御順序制御をスレッドAB間で直接行えばいい話でファイルアクセスどうこうは関係ないってことだろう
587デフォルトの名無しさん (オイコラミネオ MM13-Zoup)
2023/11/11(土) 13:51:34.21ID:uCuKaL40M スレが伸びてると思ったら
複数スレッドで変数…
フラグが立った気もする
大学に聴講生いたな
おばちゃんだったけど新しいことを学ぼうとする姿勢が偉い
複数スレッドで変数…
フラグが立った気もする
大学に聴講生いたな
おばちゃんだったけど新しいことを学ぼうとする姿勢が偉い
588デフォルトの名無しさん (スップ Sd1f-Zoup)
2023/11/11(土) 14:02:50.08ID:rffcSM1cd スレッド起こした順に書込みも順にしたいの?
起こしたときに番号振ってファイルAにみな書込みするようにして
書き込む結果は振り番と結果書き込ませて
そのファイルAを監視して順番に書き出すスレッドなりで
目的のファイル作れば?
起こしたときに番号振ってファイルAにみな書込みするようにして
書き込む結果は振り番と結果書き込ませて
そのファイルAを監視して順番に書き出すスレッドなりで
目的のファイル作れば?
589デフォルトの名無しさん (ワッチョイ 7ff5-1DlE)
2023/11/11(土) 15:16:06.79ID:RSKqgUUO0 聴講って何かの誤変換かと思ってたけど
聴講生だったのか
道理で
聴講生だったのか
道理で
590デフォルトの名無しさん (ワッチョイ ffda-XI6K)
2023/11/11(土) 16:05:06.98ID:MfZ2/qTS0 >>588
順番はAが書き込んでBが書き込む
Bが早く終わろうがAが書き込みした後しか書き込み無理ってことです。
もうひとつの厄介ありました。
Aが書き込み終わったよっていうフラグを立てる時間
Aが書き込んだ時間
にタイムラグある場合どうしよう。
もちろんAが書き込みする関数呼んだあとにフラグ立てるんだけど
フラグ立てたときってほんとに書き込み終了してる?って話です。
順番はAが書き込んでBが書き込む
Bが早く終わろうがAが書き込みした後しか書き込み無理ってことです。
もうひとつの厄介ありました。
Aが書き込み終わったよっていうフラグを立てる時間
Aが書き込んだ時間
にタイムラグある場合どうしよう。
もちろんAが書き込みする関数呼んだあとにフラグ立てるんだけど
フラグ立てたときってほんとに書き込み終了してる?って話です。
591デフォルトの名無しさん (スプッッ Sd1f-4LBs)
2023/11/11(土) 16:24:57.12ID:CPZqzXvFd もういい、消えろ
592デフォルトの名無しさん (ワッチョイ ff7b-gzdM)
2023/11/11(土) 16:42:12.75ID:oxGqzPfa0 今後の質問者には先にChatGPTである程度やり取りしてもらって
それでもわかんなかった所だけ聞きに来てもらうほうが
お互い幸せになれる気がする
それでもわかんなかった所だけ聞きに来てもらうほうが
お互い幸せになれる気がする
593デフォルトの名無しさん (ワッチョイ ffbc-Zoup)
2023/11/11(土) 16:57:49.93ID:NvFe8ImE0 それ以前に、もう少し、こう、コミュニケーションというものを考えて、せめて一度くらいは推敲してから書き込んでもらえるとお互いに幸せかもね。
要件としてはこんなところなんだろうか。
・何らかの処理を行うためにスレッドを起動する。
・その処理(スレッド)は複数ある可能性がある。
・その処理の結果を一定の規則でファイルに出力する。
自分だったら、メインスレッド(処理用のスレッドを立ち上げる側)に処理スレッドの結果を返すようにして、処理スレッドがすべて終わった後にメインスレッドで規則に従ったファイル出力を行うように作るけど。
要件としてはこんなところなんだろうか。
・何らかの処理を行うためにスレッドを起動する。
・その処理(スレッド)は複数ある可能性がある。
・その処理の結果を一定の規則でファイルに出力する。
自分だったら、メインスレッド(処理用のスレッドを立ち上げる側)に処理スレッドの結果を返すようにして、処理スレッドがすべて終わった後にメインスレッドで規則に従ったファイル出力を行うように作るけど。
594デフォルトの名無しさん (ワッチョイ 7fbd-XI6K)
2023/11/11(土) 17:08:03.68ID:B6ZfAYMe0 Win32APIで非同期書き込み
・CreateFile() FILE_SHARE_WRITE FILE_FLAG_OVERLAPPED
・AのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighに指定する書き込み開始位置に、
現在のファイルサイズを指定(後述するが0xFFFFFFFFでの追記は避けること)
・BのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighにBで渡したファイルサイズ+Aで書き込むサイズ
WriteFile()は指定サイズ全てを1回で書き込めるとは限らないので、書き込んだサイズ分
OffsetとOffsetHighをずらしながら残りをWriteFile()する。
位置をずらして指定していくのとBの分を並列で書き込むので0xFFFFFFFFでの追記を行ってはならない。
書き込んだサイズは
・GetOverlappedResult()で調べる(呼ぶタイミングが分からない)
・WriteFileEx()でlpCompletionRoutineを指定する(完了ルーチンでWriteFileEx()を繰り返すとスタックが溢れる恐れあり)
・IOCP
・スレッドプールI/O
のいずれかを使う。
C#で同等のことを行う方法は知らん。
・CreateFile() FILE_SHARE_WRITE FILE_FLAG_OVERLAPPED
・AのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighに指定する書き込み開始位置に、
現在のファイルサイズを指定(後述するが0xFFFFFFFFでの追記は避けること)
・BのWriteFile() OVERLAPPED構造体のOffsetとOffsetHighにBで渡したファイルサイズ+Aで書き込むサイズ
WriteFile()は指定サイズ全てを1回で書き込めるとは限らないので、書き込んだサイズ分
OffsetとOffsetHighをずらしながら残りをWriteFile()する。
位置をずらして指定していくのとBの分を並列で書き込むので0xFFFFFFFFでの追記を行ってはならない。
書き込んだサイズは
・GetOverlappedResult()で調べる(呼ぶタイミングが分からない)
・WriteFileEx()でlpCompletionRoutineを指定する(完了ルーチンでWriteFileEx()を繰り返すとスタックが溢れる恐れあり)
・IOCP
・スレッドプールI/O
のいずれかを使う。
C#で同等のことを行う方法は知らん。
595デフォルトの名無しさん (ワッチョイ 7fbd-XI6K)
2023/11/11(土) 17:09:02.17ID:B6ZfAYMe0 訂正:Bで渡したファイルサイズ→Aで渡したファイルサイズ
596デフォルトの名無しさん (ワッチョイ ff02-FvvN)
2023/11/11(土) 17:11:14.77ID:6Uwmj7p80 古典的な方法は
書き込む前に「書き込み中だよ」というファイルを作って
おもむろに書き込んで終わったらファイルを消去する
他のプロセスは「書き込み中だよ」ファイルがないことを
確認してから「書き込み中だよ」ファイルを作る
あるいはDBに任せるかな
書き込む前に「書き込み中だよ」というファイルを作って
おもむろに書き込んで終わったらファイルを消去する
他のプロセスは「書き込み中だよ」ファイルがないことを
確認してから「書き込み中だよ」ファイルを作る
あるいはDBに任せるかな
597デフォルトの名無しさん (ワッチョイ 7ff5-1DlE)
2023/11/11(土) 17:14:49.80ID:RSKqgUUO0 書き込む前に配列作るだけな気もするけど
まぁ書き込みたいならしゃーない
まぁ書き込みたいならしゃーない
598デフォルトの名無しさん (ワッチョイ ff01-bJ+2)
2023/11/11(土) 17:24:04.61ID:G8HZ7IiV0 >>590
static async Task Main(string[] args)
{
var taskA = Task.Run(()=> CalcA());
var taskB = Task.Run(()=> CalcB());
var resultA = await taskA;
await Save(resultA);
var resultB = await taskB;
await Save(resultB);
}
これを一般化してtaskをListに追加していって
Listを回して計算結果をawaitしながら直列で書き込めばいい
static async Task Main(string[] args)
{
var taskA = Task.Run(()=> CalcA());
var taskB = Task.Run(()=> CalcB());
var resultA = await taskA;
await Save(resultA);
var resultB = await taskB;
await Save(resultB);
}
これを一般化してtaskをListに追加していって
Listを回して計算結果をawaitしながら直列で書き込めばいい
599デフォルトの名無しさん (スップ Sd9f-Blpp)
2023/11/11(土) 18:15:19.76ID:GzLBx05/d 馬鹿は馬鹿だから設計も実装もできない
馬鹿の考え休むに似たりとはこのこと
こんな馬鹿はシングルスレッドにしとけよ
馬鹿の考え休むに似たりとはこのこと
こんな馬鹿はシングルスレッドにしとけよ
600デフォルトの名無しさん (ワッチョイ ff8b-XI6K)
2023/11/11(土) 18:17:22.37ID:MfZ2/qTS0601デフォルトの名無しさん (ワッチョイ ff02-FvvN)
2023/11/11(土) 18:29:22.82ID:6Uwmj7p80602デフォルトの名無しさん (ワッチョイ 7f94-gzdM)
2023/11/11(土) 18:46:23.39ID:wxiCP7Qj0603デフォルトの名無しさん (ワッチョイ 7f79-l6lv)
2023/11/11(土) 18:58:24.74ID:JXC3KAMY0 >>596
その手順ではアトミック性が損なわれるから正常に機能しない
プロセスが最初にやるべきは盲目的に「書き込み中だよ」ファイルを作ろうとする事
ファイルを所有できたかはファイルの作成の成否で判定する…つまりこんな馬鹿なことは今すぐ辞めるべき
その手順ではアトミック性が損なわれるから正常に機能しない
プロセスが最初にやるべきは盲目的に「書き込み中だよ」ファイルを作ろうとする事
ファイルを所有できたかはファイルの作成の成否で判定する…つまりこんな馬鹿なことは今すぐ辞めるべき
604デフォルトの名無しさん (ワッチョイ 7fe5-Zoup)
2023/11/11(土) 19:32:29.94ID:QEeEkTCo0 それぞれのスレッドが各々でファイルを書かなきゃいけない理由がなんかあるんかな?
そうじゃないならそれぞれの計算結果を親スレッドが受け取って
親スレッドがまとめて書き込めばいいんじゃないかなぁ
そうじゃないならそれぞれの計算結果を親スレッドが受け取って
親スレッドがまとめて書き込めばいいんじゃないかなぁ
605デフォルトの名無しさん (アウアウウー Sae3-Xzxn)
2023/11/11(土) 19:33:39.57ID:2HJkyP1va ファイルはだめだけど
ディレクトリ作成はok
ディレクトリ作成はok
606デフォルトの名無しさん (ワッチョイ 1f94-IE43)
2023/11/11(土) 19:44:09.90ID:kflznpjK0 >>604
俺ならこれ
場合によってはスレッドの意味が薄くなるけど、設計としては明白になりやすそう
もしくは各スレッドの結果?の書込処理について統合して管理するクラスを作る
順序を定義しといてキューに溜めとく感じ
俺ならこれ
場合によってはスレッドの意味が薄くなるけど、設計としては明白になりやすそう
もしくは各スレッドの結果?の書込処理について統合して管理するクラスを作る
順序を定義しといてキューに溜めとく感じ
607デフォルトの名無しさん (ワッチョイ ff02-FvvN)
2023/11/11(土) 19:55:09.06ID:6Uwmj7p80 linuxのパスワード書き換えプログラム vipw
がファイルを生成して排他制御をしているのだが
問題があったという話を聞いたことがないけど
がファイルを生成して排他制御をしているのだが
問題があったという話を聞いたことがないけど
608デフォルトの名無しさん (スプープ Sd9f-Zoup)
2023/11/11(土) 20:07:11.14ID:mqML6fZGd Aが書きこまないとBが書き込めない?
Aが新規ファイルに書き込んで
Bがそれ見つけてから書き込むようにしろ
Aが新規ファイルに書き込んで
Bがそれ見つけてから書き込むようにしろ
609デフォルトの名無しさん (ワッチョイ 7f94-gzdM)
2023/11/11(土) 20:35:27.62ID:wxiCP7Qj0 >>607
ロックファイルを用いた排他制御の手法をちょっと間違えて覚えてるな
> 「書き込み中だよ」ファイルがないことを確認してから
って部分が無意味
確認後にファイルを生成するまでの間に他のプロセスがファイルを生成するかもしれない
ロックファイルを用いた排他制御の手法をちょっと間違えて覚えてるな
> 「書き込み中だよ」ファイルがないことを確認してから
って部分が無意味
確認後にファイルを生成するまでの間に他のプロセスがファイルを生成するかもしれない
610デフォルトの名無しさん (ワッチョイ 9f04-RgHV)
2023/11/11(土) 20:58:58.22ID:piBb8Nie0 >>604
おれもそうするわ
おれもそうするわ
611デフォルトの名無しさん (ワッチョイ 7f31-vmna)
2023/11/11(土) 21:32:07.49ID:bCDMs/TZ0 >親スレッドがまとめて書き込めばいいんじゃないかなぁ
“まとめて”の意味合いにもよるけどAの書き込み処理はBの計算結果を待たずに開始できる点に留意する必要がある
“まとめて”の意味合いにもよるけどAの書き込み処理はBの計算結果を待たずに開始できる点に留意する必要がある
612デフォルトの名無しさん (ワッチョイ 7fe5-Zoup)
2023/11/11(土) 21:55:20.34ID:QEeEkTCo0613デフォルトの名無しさん (ワッチョイ 7fe5-Zoup)
2023/11/11(土) 21:56:20.93ID:QEeEkTCo0 あと、待ってるのはあくまで親であって、AとBの計算はパラで進めてくれて一向にかまわん
話の内容からして、Aの結果をもとにBが計算するわけでも無いだろうし
話の内容からして、Aの結果をもとにBが計算するわけでも無いだろうし
614デフォルトの名無しさん (ワッチョイ 1f9f-XI6K)
2023/11/11(土) 23:26:02.16ID:T+Kc9o9H0 こういう複雑さを考えるとRDBってよく出来てるなあ
615デフォルトの名無しさん (スプープ Sd9f-Zoup)
2023/11/11(土) 23:42:10.88ID:hf5ytgdCd AとBを同列に考えるからだめなんだ
Aが終わらないとBが結局終われないのだったら
BがAの親になればいいんだw
Aが終わらないとBが結局終われないのだったら
BがAの親になればいいんだw
616デフォルトの名無しさん (ワッチョイ 7fcb-MsHe)
2023/11/12(日) 00:18:55.26ID:IOHJkfoT0 >>572がいち早く嗅ぎつけたように、質問者は真の目的に対して無自覚に不適切な実現手段を選定している(それ故に、不適切な実現手段における実装上の課題、つまり二次的な課題を相談するハメなってる)
C#での実装手続きを検討する前段に立ち戻ることをオススメする
C#での実装手続きを検討する前段に立ち戻ることをオススメする
617デフォルトの名無しさん (ワッチョイ 7fe5-Zoup)
2023/11/12(日) 06:54:13.24ID:QHBv8+9D0 嗅ぎつけたて、>>572は質問者だぞ
618あぼーん
NGNGあぼーん
619デフォルトの名無しさん (ワッチョイ 7fcb-MsHe)
2023/11/12(日) 08:50:55.63ID:IOHJkfoT0620デフォルトの名無しさん (ワッチョイ 9f42-/zbX)
2023/11/12(日) 09:30:41.24ID:qtbaU10h0 一番の問題は、処理時間の大半を占めるだろうファイルの書き込み自体が並立処理ができないし
オープン、書き込み、クローズ等の回数が増大して処理時間が遅くなることだな
もちろんスレッドの切り替えや排他制御や順序の制御など色々仕事が増えるし、この部分も並列処理できない
マルチスレッドの練習ならいいけど、実用ソフトの作成ならシングルスレッドで書いたほうが遥かに早いものができる
オープン、書き込み、クローズ等の回数が増大して処理時間が遅くなることだな
もちろんスレッドの切り替えや排他制御や順序の制御など色々仕事が増えるし、この部分も並列処理できない
マルチスレッドの練習ならいいけど、実用ソフトの作成ならシングルスレッドで書いたほうが遥かに早いものができる
621デフォルトの名無しさん (ワッチョイ ffbc-Zoup)
2023/11/12(日) 10:50:45.23ID:0qXKJ0sK0 もう完全にスレチになんだけど。
>>620 みたいな決めつけってどうなんだろう。
素人がわざわざスレッドなんて言い出してるんだから、質問者が説明できていないだけでスレッドが必要な背景があるのかもしれない、と考えてあげてもよさそう。
自分も質問スレ等を利用したことがあるけど、意図して説明を省略したところの説明を強要されたり決めつけられたりすると、う~んと思うこともあったからね。
まあきちんと説明できない側が悪いのだけど。
言い訳的には誰にでもきちんと理解させられるほど状況を整理できてるなら、質問スレに頼る必要はほぼないかもしれない、とか。
>>620 みたいな決めつけってどうなんだろう。
素人がわざわざスレッドなんて言い出してるんだから、質問者が説明できていないだけでスレッドが必要な背景があるのかもしれない、と考えてあげてもよさそう。
自分も質問スレ等を利用したことがあるけど、意図して説明を省略したところの説明を強要されたり決めつけられたりすると、う~んと思うこともあったからね。
まあきちんと説明できない側が悪いのだけど。
言い訳的には誰にでもきちんと理解させられるほど状況を整理できてるなら、質問スレに頼る必要はほぼないかもしれない、とか。
622デフォルトの名無しさん (ワッチョイ ff10-Zoup)
2023/11/12(日) 11:01:35.90ID:EoAEw2XZ0 別にいいけど、しっかりと要点を説明できなきゃ、的外れな助言をされても文句は言えないからねぇ
623デフォルトの名無しさん (ワッチョイ 1f01-qIOU)
2023/11/12(日) 11:04:51.41ID:FeTL5mFV0 >>618
鬼コスパだな
鬼コスパだな
624デフォルトの名無しさん (ワッチョイ 1f94-IE43)
2023/11/12(日) 11:17:52.90ID:1lLdbIkC0 そもそもでいうなら、順番を待たなきゃいけない設計を見直さんとね
決まった順番で同じファイルに書き込まなきゃ理由がわからんからね
中のファイルが構造的でなきゃいけない場合、単純に順番に書込むだけでそれが担保出来てるのか、とか
例えばよくあるデータ形式にしても、
CSVならあまり順番意識しないから追記ってのもあるだろうけど、jsonで追記とかまあ自分は聞かないし
目の前の要求が満たせていればいい、っていうのも分からなくはないが
そこら辺の前提がないと最善などわからんよね
決まった順番で同じファイルに書き込まなきゃ理由がわからんからね
中のファイルが構造的でなきゃいけない場合、単純に順番に書込むだけでそれが担保出来てるのか、とか
例えばよくあるデータ形式にしても、
CSVならあまり順番意識しないから追記ってのもあるだろうけど、jsonで追記とかまあ自分は聞かないし
目の前の要求が満たせていればいい、っていうのも分からなくはないが
そこら辺の前提がないと最善などわからんよね
625デフォルトの名無しさん (ワッチョイ ff10-Zoup)
2023/11/12(日) 11:22:02.03ID:EoAEw2XZ0 >>623
氏ね自演
氏ね自演
626594 (ワッチョイ 7fbd-XI6K)
2023/11/12(日) 11:24:38.62ID:O1mU2H+U0627デフォルトの名無しさん (ワッチョイ 1f02-qIOU)
2023/11/12(日) 11:47:28.89ID:P9Q12+Ee0 >>618
ポイントを秒でゲットするのか
ポイントを秒でゲットするのか
628デフォルトの名無しさん (ワッチョイ 9f42-/zbX)
2023/11/12(日) 12:02:09.85ID:qtbaU10h0■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 自民・森山幹事長 消費税減税を改めて“否定”「財源ないと辻褄あわない」 ★2 [首都圏の虎★]
- 【ゲーム】RPGで「ああ、これね…」となる“嫌な展開” 「育ててないメンバー強制バトル」「ミニゲーム必須」 [ひぃぃ★]
- 【大阪】予約した本が借りられない、本が書棚にない…市立図書館が大混乱 大阪維新「文化行政」コスト削減の結末 [ぐれ★]
- 渡邊渚「私は玉の輿という言葉が嫌い」「勝手に野球選手大好きみたいなレッテルを貼られちゃう」グラビアでも受けた世間の偏見語る [muffin★]
- 【仕事】若者の77%「管理職なりたくない」GW明け退職代行に依頼殺到 SNS時代の“即ヤメ”と働き方の変化 [ぐれ★]
- 大河「べらぼう」異例の注意喚起が話題 冒頭のテロップに視聴者反応「驚いた」「そういうことか」 [首都圏の虎★]
- 【実況】博衣こよりのえちえちロックマンX4🧪
- 【悲報】中国の4月輸出は8%増、トランプ関税発動後も特に影響なくむしろ貿易が活発になる [709039863]
- 🏡
- 【速報】暇空茜 実刑の可能性が急浮上 [382895459]
- エロ漫画多過ぎてあの話読みたい!ってなっても探しあてられないよね
- 宇宙とかいう今この瞬間も凄まじい勢いで広がり続けてる奴