- 1 名前:デフォルトの名無しさん [2022/02/19(土) 11:56:42.14 ID:kSnJ/KwP.net]
- 前スレ
C++相談室 part158 https://mevius.5ch.net/test/read.cgi/tech/1636969758/
- 91 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 22:05:20.94 ID:NpsKB2au.net]
- 真面目に相手をするなら、質問の前提を明確にしないといけないから。
聞きたいことだけ書いてきて、状況が全く分からない質問に対して、あれこれ書いても意味はなく、最初にしないといけないのはまず確認。 環境やら現象やら具体的なコード、最終的なゴールがどこか、当たり前のモノが全て抜けていて、未だに8割方見えていない。
- 92 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 22:27:52.22 ID:2lTMmgDc.net]
- 質問に対して状況を確認せず真っ先に>>81で抜けてる回答してる君がいうと説得力があるね
- 93 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 22:40:17.44 ID:NpsKB2au.net]
- あれはいつものWIN32APIスレへの誘導しか意味してないw
.exeが出て来た時点で萎える
- 94 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 23:11:26.10 ID:Vo68A3hI.net]
- 同時には無理やろ〜
- 95 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 23:17:32.27 ID:NpsKB2au.net]
- // std::endlでflush()。時間測定と1行/秒機能付きバッファ懸念OS順序懸念あり。
// 混ざった行が出来たり上書き消滅してもいい人向け。 #include <iostream> #include <fstream> #include <chrono> #include <thread> using namespace std::chrono; template<typename T, typename CallbackFunc, typename TargetFunc, typename... Args> void measure(CallbackFunc callback, TargetFunc f, Args... args) { auto start = high_resolution_clock::now(); auto result = f(args...); auto end = high_resolution_clock::now(); callback(result, duration_cast<T>(end - start).count()); } int write_to_file(const char* path, const char* sts) { std::ofstream f(path, std::ios_base::app); for (int i = 0; i < 10; ++i) { f << sts << std::endl; //std::this_thread::sleep_for(1s); } return 0; } int main(int argc, char* argv[]) { int ret = -1; measure<microseconds>( [&](auto result, auto time) {ret = result; std::cout << time << std::endl; }, &write_to_file, "hoge.txt", (argc > 1 ? argv[1] : "hoge")); return ret; }
- 96 名前:デフォルトの名無しさん mailto:sage [2022/02/21(月) 23:19:40.75 ID:NpsKB2au.net]
- 書き忘れた。異常系なし。
- 97 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 08:35:20.17 ID:4AnTGrM3.net]
- セマフォかミューテックス使えばいいだけやん
- 98 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 08:52:30.71 ID:uvLrfhT4.net]
- 偉そうなこと言っといて>>83の上書き禁要件ガン無視してるのは草
- 99 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 08:56:43.07 ID:vnxKrxaR.net]
- 消滅って実際あるもんかね?
unix系はなさそうな気がする
- 100 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 10:16:04.97 ID:fFHtSmjB.net]
- 標準ライブラリの仕様で上書き消滅しないって保証されてれば問題ない
保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
- 101 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 10:38:46.92 ID:3Vwbzil/.net]
- >>99
> 保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない バカなの? 普通に排他制御すればいいだけだろ
- 102 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 12:32:42.83 ID:G6nBeheJ.net]
- 俺は最初にWIN32APIスレへの誘導の意味で、OS固有の方法と書いてるよw ソースコードは回答ではなく、本来質問時に提示されるべき叩き台を俺がわざわざ書いただけw
ソースコードが分からないアホ向けに説明しておくと、OSに書き込みが発生するのは実際にファイルに書き込むAPIを叩いたとき(/システムコールかそれに準ずるものを呼んだ時(以下略))なので、それはバッファをフラッシュするタイミングになる。 それが発生するのは普通fに文字列を書き込むときバッファが溢れるかendlの呼び出し中(ライブラリの実装に依存する)。 文字列の長さがバッファから溢れない限り、endl中のAPI呼出が重なるかどうかが問題になる。 各プロセスでAPI呼出が運悪く重なった場合、ここからは一度に書き込まれる量と、OSのファイルシステム実装に依存するが、 混ざった行が出来たり上書き消滅する可能性が生まれる。 それが問題な場合は、主にOS固有の方法でIPCかファイルロックを行う必要がある。 なお要件が明確でない状態で何かを言う必要は全くないw
- 103 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:18:13.18 ID:/94dJWyd.net]
- グダグタと意味不明な長文書いておいて
> なお要件が明確でない状態で何かを言う必要は全くないw って笑いでも取ろうとしてるのか?
- 104 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:22:26.14 ID:uHuVwSWm.net]
- > 複数のプロセスから同時に同じファイルに書き込む
> 書き込んだ順に並ぶようにするには 同時に書き込んでるのに書き込んだ順が決まるわけないやろ〜
- 105 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:30:20.16 ID:Xp3JBKU/.net]
- 何したいのか知らないけど>>85で出てるようにタイムスタンプ付けて別のファイルとして書き出した後、
メモリ上でマージするなり第三のプロセスでマージしたファイルを書き出すなりするのが一番楽だな
- 106 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:33:11.97 ID:/94dJWyd.net]
- >>103
秒オーダーで揃ってりゃいいって話だから多少の前後は気にすんな
- 107 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:39:15.40 ID:uHuVwSWm.net]
- ファイルOpenして書き込んですぐCloseするだけやん。
- 108 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 13:46:45.07 ID:G6nBeheJ.net]
- ほら何もかも要件の問題だろ?w 馬鹿なんだよ質問者がw
- 109 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 16:11:10.10 ID:BY2+Ruab.net]
- 馬鹿が馬鹿を笑う地獄絵図
- 110 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 21:29:07.28 ID:3uW2JHvs.net]
- 質問のレベルが低くて恐縮ですが、クラスにおいてメンバ変数は各インスタンスに対してメモリが確保されますが、メンバ関数も各インスタンス毎にメモリ確保されるんでしたっけ?
メンバ関数はクラスで共有されるんでしたっけ?
- 111 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 21:44:13.67 ID:G9HkpoRr.net]
- 共有されてて、呼び出すときにインスタンスのポインタが渡ります。
- 112 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 21:53:10.29 ID:aBkA6PYf.net]
- >>109
通常のメンバ関数の実体はそのクラスで1つ(共有される)でインスタンスのメモリ領域は消費しないが、 virtual関数はオーバーライド動作のためにインスタンスにポインタが確保される
- 113 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:27:23.48 ID:Ui5AoFrq.net]
- >>110>>111
ありがとうございます! virtualはともかくメンバ関数を書く際にあまりその点は気にしなくてよさそうですね、安心しました
- 114 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:27:30.88 ID:Ui5AoFrq.net]
- >>110>>111
ありがとうございます! virtualはともかくメンバ関数を書く際にあまりその点は気にしなくてよさそうですね、安心しました
- 115 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:31:03.90 ID:Ee0G2C5Q.net]
- main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが 作らなくても実現出来る方法があれば教えてください
- 116 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:31:52.69 ID:Ee0G2C5Q.net]
- main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが 作らなくても実現出来る方法があれば教えてください
- 117 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:32:39.84 ID:SYhqe6to.net]
- virtualも継承されたクラスごとにポインタサイズの隠しフィールドができるだけで
virtual関数が増えてもクラスサイズは変わらないんじゃ?
- 118 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:38:55.24 ID:SYhqe6to.net]
- >>114
>>115 C++17以降ならstatic変数がある それ以前ならtemplate関数を使ってどうにかごまかせばいける class C{}; inline C c=...; //C++17以降 template<int...>C& _dummy_func(){static C _back=...; return _back;}static C&c=_dummy_func();
- 119 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:39:30.53 ID:G6nBeheJ.net]
- ポインタサイズじゃないよ
- 120 名前:デフォルトの名無しさん mailto:sage [2022/02/22(火) 22:39:57.82 ID:SYhqe6to.net]
- static変数じゃねーわ inline変数
- 121 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 01:56:47.51 ID:vCUIsgzX.net]
- https://godbolt.org/z/P497GqYc7
struct s { virtual void* func(){return this;} virtual void* func2(){return this;} }; struct s2: public s { void* func(){return this;} void* func2(){return this;} }; s obj; s2 obj2; int main() { s& o = obj2; o.func(); o.func2(); return 0; } gcc/clang/msvcどれもポインタサイズだった模様w >>114についてはまた同じ馬鹿の質問だろうけど論外w コードで示せアホw 「main(exe)とlib(dll)の両方から参照される参照されるクラスHoge(非dll・シングルトン)」???? クラスHogeはシングルトンなのかそうでないのか? lib(dll)から参照されるクラスHoge(非dll)とは? どうして毎日こんな馬鹿な質問が出来るのか分からない。 仮にDLLが遅延ロードされず、シングルトンで、インスタンスの定義だけEXE側に入れたいというアホな要件を思いついた馬鹿がいるのだとしたら、dllexportを使わず、モジュール定義でやれ。 なお、inlineメンバ変数を使ってもdllexpportsならDLL側にインスタンスの定義が入る。
- 122 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 09:00:40.51 ID:stefKGxD.net]
- ヒント: 仮想継承
- 123 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 13:46:51.78 ID:UVDZkpPA.net]
- >>96
そうだねミューテックス使うね
- 124 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 13:49:09.36 ID:UVDZkpPA.net]
- Windowsなら名前付きミューテックスでファイルのオープンからクローズまでを排他するところやが
C++の標準規格でどうなっているのかわ知らん、
- 125 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 14:13:27.06 ID:UVDZkpPA.net]
- 複数のプロセスから同一ファイルに書き込んで書き込み内容の順序(位置)を制御する方法は
1. プロセス間の同期側で順序を担保する(イベント等による通信を併用 2. ファイルのアクセス権を握ったプロセスがファイルの中身を読んで書き込み位置を決める 3. ファイルのアクセス権を握ったプロセスがファイルを追記オープンして単純に追記していく の大きく分けて3つの方法が取れる 普通は3が多いという印象 ※ 個人の感想です 辞書化とかが必要なら専用のプロセスが適宜ファイルのアクセス権を獲得してやったらええ、
- 126 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 14:58:09.38 ID:lSALbkfN.net]
- ちょっと処理が重なったくらいでデータが消えるようなコンピュータはまともに動かんと思うよ
- 127 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 15:17:24.74 ID:A1VwjaQk.net]
- そんなアホなことせんでもOSが同期取ってくれるやろ…
- 128 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 15:43:04.84 ID:vCUIsgzX.net]
- >>122-126
2日前からアホ質問者不在のまま要件不明案件でお蔵入りした質問を今更ほじくり返して質問者本人ですか?w
- 129 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 15:53:59.19 ID:A1VwjaQk.net]
- 頓珍漢な回答して相手にされないからっておれに当たるなよ。
- 130 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:03:22.40 ID:vCUIsgzX.net]
- 回答してないけどw >>122-126は全て本人確定かなw
- 131 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:04:56.99 ID:A1VwjaQk.net]
- >>129 >120
- 132 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:14:02.97 ID:vCUIsgzX.net]
- >>130
>>120も回答じゃないけどw
- 133 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:42:08.43 ID:lSALbkfN.net]
- 126と86は俺だけど…
- 134 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:45:52.89 ID:UVDZkpPA.net]
- >>126
kwsk 複数プロセスから同一ファイルに対する同時書き込みオープンは当然できなず、後から開こうとしたプロセスはオープンに失敗する その場合失敗したプロセスは(エラー要因を調べた上で)一定時間(例えばT秒後)後にオープンを再トライする必要がある んまーそう作っても良いが(ファイルアクセス権獲得待ちをいつでも簡単にやめられるメリットがある)が、 失敗の度にT秒消費するというのをミューテックスを使えば短縮できる
- 135 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:51:07.27 ID:A1VwjaQk.net]
- オープン失敗したら100ms開けてリトライで十分だろう。待機が嫌なら非同期で実装するだけ。
T秒消費するというが同期オブジェクト使っても変わらん。
- 136 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:54:41.39 ID:UVDZkpPA.net]
- >>134
>T秒消費するというが同期オブジェクト使っても変わらん。 間違い。 同期オブジェクトを使えばプロセスAがファイルへのアクセス権を行使中、 プロセスBがアクセス権が回ってくるのを待っている状態で プロセスAがアクセス権を放棄した瞬間にプロセスBにディスパッチされる ことが気体できる 無駄というものが最小限で済む
- 137 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 16:58:57.65 ID:lSALbkfN.net]
- 同期オブジェクトってそんな低レベルで存在しとる概念なのかね
- 138 名前:はちみつ餃子 mailto:sage [2022/02/23(水) 17:06:44.05 ID:o4j3GXmb.net]
- 同期オブジェクトを機能させるためにスケジューラに負担をかけるので
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。 でもスピンロックを正しく実装できる気がしない。 同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。 待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。 それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
- 139 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 17:12:13.15 ID:UVDZkpPA.net]
- >待機時間 100ms のところを 10ms とかに短縮できたところで
プロセスAがファイルのアクセス権を握り続けている間、 プロセスBがファイルシステムを10 ms周期でcallすることになるな!
- 140 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 17:17:22.47 ID:A1VwjaQk.net]
- 消費ってCPUリソースの話じゃないのか。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
- 141 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 17:21:14.59 ID:UVDZkpPA.net]
- 非同期の実装を最小の時間ロスで安全に行うものにするにはミューテックスによる同期が必要なわけで(以下無限ループ
- 142 名前:はちみつ餃子 mailto:sage [2022/02/23(水) 17:24:49.92 ID:o4j3GXmb.net]
- スピンロックは沼なんで、
OS が用意してくれとる仕組みを使えってことで FA 。
- 143 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 17:26:48.01 ID:A1VwjaQk.net]
- >>136
同期は機械語レベルの話じゃけんのう。 尻拭いの案件でよく見るが間違ってもCでグローバル変数でif文で切り分けとかしないでくれよ。 OSが提供する同期オブジェクト使うんだ。
- 144 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 17:30:05.39 ID:lSALbkfN.net]
- タイミング合わせるために工夫をこらしたプログラムってのは見ていて嫌な気分になるのう
8bit機なら全部ビジーウェイトでいいんだけど
- 145 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 18:04:03.45 ID:vCUIsgzX.net]
- >>
- 146 名前:94
のコードでコメントを外してビルドし、端末を2つ開いてほぼ同時にそれぞれ ./実行ファイル名 hoge1 ./実行ファイル名 hoge2 で実行してやると分かるけど、オープンはできていて書き込みも行われるよ ポーリングで見ようがロックできなければ>>101の解説どおり危険な瞬間(同時にAPIが呼ばれる瞬間)は必ず発生してしまう。 ポーリング間隔0をスピンロックとかビジーウェイトと言ってるのだと思うが、用語の使い方は置いておいて、0でも同様。 []- [ここ壊れてます]
- 147 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 18:13:52.21 ID:A1VwjaQk.net]
- 8bitのCPUなんて命令の消費clockでタイミング取るとか普通やん
- 148 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 19:32:25.60 ID:+QDyyf8g.net]
- ウェイト気にするんだったらI/O周りでガチャガチャするより書き込み要求をキューで受け付ける専門プロセス用意しろよ
- 149 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 19:34:41.10 ID:lREuCbZK.net]
- >>117
ありがとうございます、inline変数を試してみます
- 150 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 19:41:23.72 ID:lREuCbZK.net]
- >>120
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。 クラスHogeは書いている通りシングルトンです。 よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。 visual studioでいうと、 Hogeが入っているプロジェクトと mainのプロジェクト、 dllのプロジェクトの3つがあって mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
- 151 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 20:42:20.48 ID:vCUIsgzX.net]
- >>148
日本語で説明できてないんだよw 今も確認が必要になってるだろ 問題は何? シングルトンオブジェクトが、プロセス内に2つ(exe側とdll側)あること? dllは遅延ロードするの?
- 152 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 20:50:56.75 ID:vCUIsgzX.net]
- >>146
結局ここまで全部要件の問題ということで・・・
- 153 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 21:10:52.14 ID:A1VwjaQk.net]
- Hogeのヘッダとlibファイルをmainとdllのプロジェクトに追加するだけの話じゃないのか。
- 154 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 21:37:03.52 ID:vCUIsgzX.net]
- >>151
こんな感じになってるんだと思う https://wandbox.org/permlink/ME0HLrM3vXDeMvoR main.cpp(exeプロジェクト) api.h(dllプロジェクト) api.cpp(dllプロジェクト) Sample.h(libプロジェクト) Sample.cpp(libプロジェクト) vc++で実行すれば分かるけど、dllとexeでインスタンスが2個出来る IDEが作るファイルは使ってない(プリコンパイル済ヘッダ未使用vs2019で確認)
- 155 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 21:55:19.66 ID:PssNo99E.net]
- >>148
あーすまん.dllならinline変数でもダメだわ .libとの変数共通ならいけるんだが
- 156 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 22:10:26.11 ID:vCUIsgzX.net]
- >>152
どうせ昼間のIDの誰かが質問者兼>>153だと思うので面倒なので補足しておく。 もし>>149の > シングルトンオブジェクトが、プロセス内に2つ(exe側とdll側)あること? がYesで > dllは遅延ロードするの? がNoなら クラスSampleの宣言に__declspec(dllexport)を付けることで、1つにすることはできる。 ただし実体がdllに入るので、遅延ロードはできない作りになる。
- 157 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 22:31:49.11 ID:PssNo99E.net]
- 質問者ではないけど俺は.hで完結させたい人種なので「dll側かexe側に変数の実体を作らなきゃいけない」という縛りを極端に嫌ってる
dllとも変数実体を共有したいなら.h完結を諦めて ・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる ぐらいしかまともな回答は思いつかん どうせ複数dllから1つの変数を共有したいって話にもなるから 実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
- 158 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 22:49:56.05 ID:A1VwjaQk.net]
- hogeの実装がどこにあるべきか決めてないとな。COMにするという手もあるな。
- 159 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 23:10:37.89 ID:vCUIsgzX.net]
- 質問者本人の匂いがプンプンするけど、全部ヘッダならそもそもlibやdll要らないでしょ
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある 管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。 COMにするならもうC#で作ればいいのにと思ってしまう。
- 160 名前:デフォルトの名無しさん [2022/02/23(水) 23:14:23.43 ID:bb+gp0i+.net]
- Linuxには名前付きミューテックスないだっけ?
プロセス間の排他制御にflock使った思い出
- 161 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 23:19:02.33 ID:kWD6+CX1.net]
- pthreadにあるやつが使えるからあるんでしょう
- 162 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 23:19:54.09 ID:kWD6+CX1.net]
- mutexっていうかセマフォ使ってるかも
- 163 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 23:33:12.25 ID:vCUIsgzX.net]
- linuxのプロセス間同期にはセマフォを使うよ
https://man7.org/linux/man-pages/man7/sem_overview.7.html boostでやりたければこんな感じらしい https://www.boost.org/doc/libs/1_58_0/doc/html/interprocess/synchronization_mechanisms.html#interprocess.synchronization_mechanisms.mutexes.mutexes_named_example ※最近boost使ってないのでよく知らない
- 164 名前:デフォルトの名無しさん [2022/02/23(水) 23:43:27.24 ID:bb+gp0i+.net]
- なるほどLinuxもセマフォは名前付きがあるのね
ありがとう!
- 165 名前:デフォルトの名無しさん mailto:sage [2022/02/23(水) 23:44:52.39 ID:kWD6+CX1.net]
- 条件変数が一番好きです
- 166 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 02:08:55.88 ID:9O+r6lMK.net]
- そのへんが全て最初から言語の型として標準で装備されていて
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
- 167 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 02:43:58.81 ID:tiwBzbY0.net]
- openMPを使いたいけど使うと言えない
- 168 名前:デフォルトの名無しさん [2022/02/24(木) 03:32:22.22 ID:+hdCiApF.net]
- どうやってスレ立てるの??
- 169 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 03:59:43.03 ID:D634csZp.net]
- >>166
https://cpprefjp.github.io/reference/thread/thread.html
- 170 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 15:54:24.18 ID:ZFLA2QwP.net]
- メモリ上で連続した多次元配列を動的に確保したいんですけど、どうするのがスマートなやり方ですか?
- 171 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 16:09:23.68 ID:tiwBzbY0.net]
- 多次元配列を宣言する
- 172 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 16:12:31.94 ID:MBzpszCI.net]
- >>168
「連続した」ってとこkwsk ハード的な事情があったりするのか?
- 173 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 16:25:32.45 ID:xAP0ZjRZ.net]
- スマートが何処にかかるのか
- 174 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 16:32:30.77 ID:cGpWV2sd.net]
- またスマートとか自分の希望要件すら言語化できないアホな質問来てるな・・・
いっぺん真で頭ガチャするのがスマート
- 175 名前:はちみつ餃子 mailto:sage [2022/02/24(木) 16:42:22.24 ID:KIw+63Ii.net]
- 「動的に確保」というのも、コンストラクトの時点で大きさが確定するというのと
後から伸長する可能性も含むというのでは事情が違う。
- 176 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 17:02:25.64 ID:ZFLA2QwP.net]
- >>173
VLAのように実行時に全体の大きさを指定したいです
- 177 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 17:05:32.25 ID:M4s9COHd.net]
- mallocや
- 178 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 17:34:08.45 ID:cGpWV2sd.net]
- 小出しにしてんじゃねーよw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw そんなこともできなければ真でくれと言われてるのw
- 179 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 17:38:54.01 ID:MBzpszCI.net]
- >>174
ということは最初の割り付けでサイズが確定していて 途中でresizeはできなくていいんだな?
- 180 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 17:40:07.73 ID:MBzpszCI.net]
- あるいは、CのVLAをC++で操作できるようにしたいのか?
- 181 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 18:26:58.76 ID:qnUKy4cC.net]
- 初心者ですまんがVLAってvectorで代用できないの?
- 182 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 18:34:10.20 ID:xAP0ZjRZ.net]
- つvalarray
- 183 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 19:04:00.53 ID:7WoYZRJz.net]
- 3次元配列なら
template<class T> class V{ T*const ptr; size_t s1,s2,s3; public: V(size_t s1,size_t s2,size_t s3): s1(s1),s2(s2),s3(s3), ptr(new T[s1*s2*s3]){} T&operator()(size_t i1,size_t i2,size_t i3){ return ptr[i1*s2*s3+i2*s3*i3]; } ~V(){delete[]ptr;} }; V<int> v(4,5,6); v(1,2,3)=42; みたいのでええんか? 大体こういうの自分で作るとバグらせるからあんまやりたくないけど
- 184 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 19:07:44.67 ID:cGpWV2sd.net]
- すでにバグってる気がする
- 185 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 20:00:57.06 ID:1pzXIXf6.net]
- boostにあるけどオーバーエンジニアリングっぽいんだよな
- 186 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 20:30:12.93 ID:cGpWV2sd.net]
- 馬鹿にされたい馬鹿が小出しにしてる以上何とも言えないw
僕ちゃんboost使いたかったけど馬鹿だからよく分からないし、条件小出しなまま複数IDで汎用な答えが欲しいのぉって言ってるだけなのが透けて見えるw
- 187 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 20:38:21.09 ID:I6df84hq.net]
- 何の情報が必要かすら分かってない初心者かもしれないんだから聞き出してやればいいのに
煽って出てくると思ってるなら考え甘いぞ、要件引き出せないようじゃ半人前
- 188 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 20:59:04.53 ID:cGpWV2sd.net]
- ちゃんとID変えて出てきてるし煽ってないし、僕ちゃん答えは欲しいのに分不相応なプライドだけ高くて素直になれないのぉって言われてもね
- 189 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 21:02:22.10 ID:j0njw0Fu.net]
- 一方すぐ質問者にマウンティングしたがるおまえはすぐわかるなw
- 190 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 21:03:10.18 ID:MBzpszCI.net]
- > ID:cGpWV2sd
おまえイラネ 無駄にうるせえ
- 191 名前:デフォルトの名無しさん mailto:sage [2022/02/24(木) 21:29:39.55 ID:cGpWV2sd.net]
- こんなスレにいちいち相談する初心者なんてそうそういねーよ
もし初心者なら回答欲しいんだから何言われても何某か返事する そういうのがなく単発IDなどが煽ってくるということはつまり・・・図星ってことw
|

|