前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
探検
C++相談室 part159
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP2022/02/21(月) 19:50:32.28ID:NpsKB2au
OS固有の方法を使え
2022/02/21(月) 19:56:04.55ID:gBEocJIs
fprintf()とかの標準ライブラリだとcloseかflushするまで書き込みは反映されない
書き込みのタイムスタンプ順を保証するとなるとかなり面倒くさい
毎回flushするとかcloseするとかしないといけない
書き込んだ内容がもう一方のプロセスに上書きされて消えたりとかの問題も出てくる
書き込みのタイムスタンプ順を保証するとなるとかなり面倒くさい
毎回flushするとかcloseするとかしないといけない
書き込んだ内容がもう一方のプロセスに上書きされて消えたりとかの問題も出てくる
2022/02/21(月) 20:03:35.84ID:K+YQY1en
ありがとうございます。
保証とまでは求めてなくて、だいたい秒オーダー程度の順でぱっと見の違和感なければいいかなと思っていますのでひとまずflushを入れて実験してみます。
(多少の順番ずれは問題ないですが、上書き消滅だけは絶対問題なので)
保証とまでは求めてなくて、だいたい秒オーダー程度の順でぱっと見の違和感なければいいかなと思っていますのでひとまずflushを入れて実験してみます。
(多少の順番ずれは問題ないですが、上書き消滅だけは絶対問題なので)
2022/02/21(月) 20:06:09.78ID:9Efuu0ky
ロックしろ
2022/02/21(月) 20:08:56.82ID:Hi57Ra7S
・別々のファイルに吐き出しておいて後からマージ(リアルタイム性不要なら一番楽)
・書き込みの時に毎回排他ロックする(くそ遅い、書き込みが稀ならあり)
・書き込み専門のプロセスを設けてプロセス間通信(正しいけどめんどくさい)
・書き込みの時に毎回排他ロックする(くそ遅い、書き込みが稀ならあり)
・書き込み専門のプロセスを設けてプロセス間通信(正しいけどめんどくさい)
2022/02/21(月) 20:22:59.51ID:M/x1eSML
>>80
書き込みプロセスを集約した方が制御はしやすいわ
書き込みプロセスを集約した方が制御はしやすいわ
2022/02/21(月) 21:24:26.76ID:NpsKB2au
こんなC++erばかりではもうダメだな・・・・
質問は最悪だけど、確認も回答もやばい
混ざった行が出来たり上書き消滅する日がいつか来る
質問は最悪だけど、確認も回答もやばい
混ざった行が出来たり上書き消滅する日がいつか来る
2022/02/21(月) 21:47:29.24ID:2lTMmgDc
>>87
ロックを使っても行が混ざるのかーすごいなー
ロックを使っても行が混ざるのかーすごいなー
2022/02/21(月) 21:55:16.21ID:Gf4lGfIx
ロックの仕方によるから
極論文字単位にロックしたら混ざるし
極論文字単位にロックしたら混ざるし
2022/02/21(月) 22:05:20.94ID:NpsKB2au
真面目に相手をするなら、質問の前提を明確にしないといけないから。
聞きたいことだけ書いてきて、状況が全く分からない質問に対して、あれこれ書いても意味はなく、最初にしないといけないのはまず確認。
環境やら現象やら具体的なコード、最終的なゴールがどこか、当たり前のモノが全て抜けていて、未だに8割方見えていない。
聞きたいことだけ書いてきて、状況が全く分からない質問に対して、あれこれ書いても意味はなく、最初にしないといけないのはまず確認。
環境やら現象やら具体的なコード、最終的なゴールがどこか、当たり前のモノが全て抜けていて、未だに8割方見えていない。
2022/02/21(月) 22:27:52.22ID:2lTMmgDc
質問に対して状況を確認せず真っ先に>>81で抜けてる回答してる君がいうと説得力があるね
2022/02/21(月) 22:40:17.44ID:NpsKB2au
あれはいつものWIN32APIスレへの誘導しか意味してないw
.exeが出て来た時点で萎える
.exeが出て来た時点で萎える
2022/02/21(月) 23:11:26.10ID:Vo68A3hI
同時には無理やろ〜
2022/02/21(月) 23:17:32.27ID:NpsKB2au
// 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;
}
// 混ざった行が出来たり上書き消滅してもいい人向け。
#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;
}
2022/02/21(月) 23:19:40.75ID:NpsKB2au
書き忘れた。異常系なし。
2022/02/22(火) 08:35:20.17ID:4AnTGrM3
セマフォかミューテックス使えばいいだけやん
2022/02/22(火) 08:52:30.71ID:uvLrfhT4
偉そうなこと言っといて>>83の上書き禁要件ガン無視してるのは草
2022/02/22(火) 08:56:43.07ID:vnxKrxaR
消滅って実際あるもんかね?
unix系はなさそうな気がする
unix系はなさそうな気がする
2022/02/22(火) 10:16:04.97ID:fFHtSmjB
標準ライブラリの仕様で上書き消滅しないって保証されてれば問題ない
保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
100デフォルトの名無しさん
2022/02/22(火) 10:38:46.92ID:3Vwbzil/ >>99
> 保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
バカなの?
普通に排他制御すればいいだけだろ
> 保証されてなければ20プロセスぐらいからchrono::system_clockのタイムスタンプとloopcountを出力させる負荷テストしてみて判断するしかない
バカなの?
普通に排他制御すればいいだけだろ
101デフォルトの名無しさん
2022/02/22(火) 12:32:42.83ID:G6nBeheJ 俺は最初にWIN32APIスレへの誘導の意味で、OS固有の方法と書いてるよw ソースコードは回答ではなく、本来質問時に提示されるべき叩き台を俺がわざわざ書いただけw
ソースコードが分からないアホ向けに説明しておくと、OSに書き込みが発生するのは実際にファイルに書き込むAPIを叩いたとき(/システムコールかそれに準ずるものを呼んだ時(以下略))なので、それはバッファをフラッシュするタイミングになる。
それが発生するのは普通fに文字列を書き込むときバッファが溢れるかendlの呼び出し中(ライブラリの実装に依存する)。
文字列の長さがバッファから溢れない限り、endl中のAPI呼出が重なるかどうかが問題になる。
各プロセスでAPI呼出が運悪く重なった場合、ここからは一度に書き込まれる量と、OSのファイルシステム実装に依存するが、 混ざった行が出来たり上書き消滅する可能性が生まれる。
それが問題な場合は、主にOS固有の方法でIPCかファイルロックを行う必要がある。
なお要件が明確でない状態で何かを言う必要は全くないw
ソースコードが分からないアホ向けに説明しておくと、OSに書き込みが発生するのは実際にファイルに書き込むAPIを叩いたとき(/システムコールかそれに準ずるものを呼んだ時(以下略))なので、それはバッファをフラッシュするタイミングになる。
それが発生するのは普通fに文字列を書き込むときバッファが溢れるかendlの呼び出し中(ライブラリの実装に依存する)。
文字列の長さがバッファから溢れない限り、endl中のAPI呼出が重なるかどうかが問題になる。
各プロセスでAPI呼出が運悪く重なった場合、ここからは一度に書き込まれる量と、OSのファイルシステム実装に依存するが、 混ざった行が出来たり上書き消滅する可能性が生まれる。
それが問題な場合は、主にOS固有の方法でIPCかファイルロックを行う必要がある。
なお要件が明確でない状態で何かを言う必要は全くないw
102デフォルトの名無しさん
2022/02/22(火) 13:18:13.18ID:/94dJWyd グダグタと意味不明な長文書いておいて
> なお要件が明確でない状態で何かを言う必要は全くないw
って笑いでも取ろうとしてるのか?
> なお要件が明確でない状態で何かを言う必要は全くないw
って笑いでも取ろうとしてるのか?
103デフォルトの名無しさん
2022/02/22(火) 13:22:26.14ID:uHuVwSWm > 複数のプロセスから同時に同じファイルに書き込む
> 書き込んだ順に並ぶようにするには
同時に書き込んでるのに書き込んだ順が決まるわけないやろ〜
> 書き込んだ順に並ぶようにするには
同時に書き込んでるのに書き込んだ順が決まるわけないやろ〜
104デフォルトの名無しさん
2022/02/22(火) 13:30:20.16ID:Xp3JBKU/ 何したいのか知らないけど>>85で出てるようにタイムスタンプ付けて別のファイルとして書き出した後、
メモリ上でマージするなり第三のプロセスでマージしたファイルを書き出すなりするのが一番楽だな
メモリ上でマージするなり第三のプロセスでマージしたファイルを書き出すなりするのが一番楽だな
105デフォルトの名無しさん
2022/02/22(火) 13:33:11.97ID:/94dJWyd >>103
秒オーダーで揃ってりゃいいって話だから多少の前後は気にすんな
秒オーダーで揃ってりゃいいって話だから多少の前後は気にすんな
106デフォルトの名無しさん
2022/02/22(火) 13:39:15.40ID:uHuVwSWm ファイルOpenして書き込んですぐCloseするだけやん。
107デフォルトの名無しさん
2022/02/22(火) 13:46:45.07ID:G6nBeheJ ほら何もかも要件の問題だろ?w 馬鹿なんだよ質問者がw
108デフォルトの名無しさん
2022/02/22(火) 16:11:10.10ID:BY2+Ruab 馬鹿が馬鹿を笑う地獄絵図
109デフォルトの名無しさん
2022/02/22(火) 21:29:07.28ID:3uW2JHvs 質問のレベルが低くて恐縮ですが、クラスにおいてメンバ変数は各インスタンスに対してメモリが確保されますが、メンバ関数も各インスタンス毎にメモリ確保されるんでしたっけ?
メンバ関数はクラスで共有されるんでしたっけ?
メンバ関数はクラスで共有されるんでしたっけ?
110デフォルトの名無しさん
2022/02/22(火) 21:44:13.67ID:G9HkpoRr 共有されてて、呼び出すときにインスタンスのポインタが渡ります。
111デフォルトの名無しさん
2022/02/22(火) 21:53:10.29ID:aBkA6PYf112デフォルトの名無しさん
2022/02/22(火) 22:27:23.48ID:Ui5AoFrq113デフォルトの名無しさん
2022/02/22(火) 22:27:30.88ID:Ui5AoFrq114デフォルトの名無しさん
2022/02/22(火) 22:31:03.90ID:Ee0G2C5Q main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
115デフォルトの名無しさん
2022/02/22(火) 22:31:52.69ID:Ee0G2C5Q main(exe)とlib(dll)の両方から参照されるクラスHoge(非dll・シングルトン)のインスタンスをmainとlibで共用する方法はないですか。
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
軽く調べてみたらHogeをdll化するかHogeのラッパーdllを作れと出てきたのですが
作らなくても実現出来る方法があれば教えてください
116デフォルトの名無しさん
2022/02/22(火) 22:32:39.84ID:SYhqe6to virtualも継承されたクラスごとにポインタサイズの隠しフィールドができるだけで
virtual関数が増えてもクラスサイズは変わらないんじゃ?
virtual関数が増えてもクラスサイズは変わらないんじゃ?
117デフォルトの名無しさん
2022/02/22(火) 22:38:55.24ID:SYhqe6to118デフォルトの名無しさん
2022/02/22(火) 22:39:30.53ID:G6nBeheJ ポインタサイズじゃないよ
119デフォルトの名無しさん
2022/02/22(火) 22:39:57.82ID:SYhqe6to static変数じゃねーわ inline変数
120デフォルトの名無しさん
2022/02/23(水) 01:56:47.51ID:vCUIsgzX 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側にインスタンスの定義が入る。
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側にインスタンスの定義が入る。
121デフォルトの名無しさん
2022/02/23(水) 09:00:40.51ID:stefKGxD ヒント: 仮想継承
122デフォルトの名無しさん
2022/02/23(水) 13:46:51.78ID:UVDZkpPA >>96
そうだねミューテックス使うね
そうだねミューテックス使うね
123デフォルトの名無しさん
2022/02/23(水) 13:49:09.36ID:UVDZkpPA Windowsなら名前付きミューテックスでファイルのオープンからクローズまでを排他するところやが
C++の標準規格でどうなっているのかわ知らん、
C++の標準規格でどうなっているのかわ知らん、
124デフォルトの名無しさん
2022/02/23(水) 14:13:27.06ID:UVDZkpPA 複数のプロセスから同一ファイルに書き込んで書き込み内容の順序(位置)を制御する方法は
1. プロセス間の同期側で順序を担保する(イベント等による通信を併用
2. ファイルのアクセス権を握ったプロセスがファイルの中身を読んで書き込み位置を決める
3. ファイルのアクセス権を握ったプロセスがファイルを追記オープンして単純に追記していく
の大きく分けて3つの方法が取れる
普通は3が多いという印象 ※ 個人の感想です
辞書化とかが必要なら専用のプロセスが適宜ファイルのアクセス権を獲得してやったらええ、
1. プロセス間の同期側で順序を担保する(イベント等による通信を併用
2. ファイルのアクセス権を握ったプロセスがファイルの中身を読んで書き込み位置を決める
3. ファイルのアクセス権を握ったプロセスがファイルを追記オープンして単純に追記していく
の大きく分けて3つの方法が取れる
普通は3が多いという印象 ※ 個人の感想です
辞書化とかが必要なら専用のプロセスが適宜ファイルのアクセス権を獲得してやったらええ、
125デフォルトの名無しさん
2022/02/23(水) 14:58:09.38ID:lSALbkfN ちょっと処理が重なったくらいでデータが消えるようなコンピュータはまともに動かんと思うよ
126デフォルトの名無しさん
2022/02/23(水) 15:17:24.74ID:A1VwjaQk そんなアホなことせんでもOSが同期取ってくれるやろ…
127デフォルトの名無しさん
2022/02/23(水) 15:43:04.84ID:vCUIsgzX >>122-126
2日前からアホ質問者不在のまま要件不明案件でお蔵入りした質問を今更ほじくり返して質問者本人ですか?w
2日前からアホ質問者不在のまま要件不明案件でお蔵入りした質問を今更ほじくり返して質問者本人ですか?w
128デフォルトの名無しさん
2022/02/23(水) 15:53:59.19ID:A1VwjaQk 頓珍漢な回答して相手にされないからっておれに当たるなよ。
129デフォルトの名無しさん
2022/02/23(水) 16:03:22.40ID:vCUIsgzX 回答してないけどw >>122-126は全て本人確定かなw
130デフォルトの名無しさん
2022/02/23(水) 16:04:56.99ID:A1VwjaQk >>129 >120
131デフォルトの名無しさん
2022/02/23(水) 16:14:02.97ID:vCUIsgzX132デフォルトの名無しさん
2022/02/23(水) 16:42:08.43ID:lSALbkfN 126と86は俺だけど…
133デフォルトの名無しさん
2022/02/23(水) 16:45:52.89ID:UVDZkpPA >>126
kwsk
複数プロセスから同一ファイルに対する同時書き込みオープンは当然できなず、後から開こうとしたプロセスはオープンに失敗する
その場合失敗したプロセスは(エラー要因を調べた上で)一定時間(例えばT秒後)後にオープンを再トライする必要がある
んまーそう作っても良いが(ファイルアクセス権獲得待ちをいつでも簡単にやめられるメリットがある)が、
失敗の度にT秒消費するというのをミューテックスを使えば短縮できる
kwsk
複数プロセスから同一ファイルに対する同時書き込みオープンは当然できなず、後から開こうとしたプロセスはオープンに失敗する
その場合失敗したプロセスは(エラー要因を調べた上で)一定時間(例えばT秒後)後にオープンを再トライする必要がある
んまーそう作っても良いが(ファイルアクセス権獲得待ちをいつでも簡単にやめられるメリットがある)が、
失敗の度にT秒消費するというのをミューテックスを使えば短縮できる
134デフォルトの名無しさん
2022/02/23(水) 16:51:07.27ID:A1VwjaQk オープン失敗したら100ms開けてリトライで十分だろう。待機が嫌なら非同期で実装するだけ。
T秒消費するというが同期オブジェクト使っても変わらん。
T秒消費するというが同期オブジェクト使っても変わらん。
135デフォルトの名無しさん
2022/02/23(水) 16:54:41.39ID:UVDZkpPA >>134
>T秒消費するというが同期オブジェクト使っても変わらん。
間違い。
同期オブジェクトを使えばプロセスAがファイルへのアクセス権を行使中、
プロセスBがアクセス権が回ってくるのを待っている状態で
プロセスAがアクセス権を放棄した瞬間にプロセスBにディスパッチされる
ことが気体できる
無駄というものが最小限で済む
>T秒消費するというが同期オブジェクト使っても変わらん。
間違い。
同期オブジェクトを使えばプロセスAがファイルへのアクセス権を行使中、
プロセスBがアクセス権が回ってくるのを待っている状態で
プロセスAがアクセス権を放棄した瞬間にプロセスBにディスパッチされる
ことが気体できる
無駄というものが最小限で済む
136デフォルトの名無しさん
2022/02/23(水) 16:58:57.65ID:lSALbkfN 同期オブジェクトってそんな低レベルで存在しとる概念なのかね
137はちみつ餃子 ◆8X2XSCHEME
2022/02/23(水) 17:06:44.05ID:o4j3GXmb 同期オブジェクトを機能させるためにスケジューラに負担をかけるので
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。
でもスピンロックを正しく実装できる気がしない。
同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。
待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。
それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。
でもスピンロックを正しく実装できる気がしない。
同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。
待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。
それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
138デフォルトの名無しさん
2022/02/23(水) 17:12:13.15ID:UVDZkpPA >待機時間 100ms のところを 10ms とかに短縮できたところで
プロセスAがファイルのアクセス権を握り続けている間、
プロセスBがファイルシステムを10 ms周期でcallすることになるな!
プロセスAがファイルのアクセス権を握り続けている間、
プロセスBがファイルシステムを10 ms周期でcallすることになるな!
139デフォルトの名無しさん
2022/02/23(水) 17:17:22.47ID:A1VwjaQk 消費ってCPUリソースの話じゃないのか。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく
ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく
ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
140デフォルトの名無しさん
2022/02/23(水) 17:21:14.59ID:UVDZkpPA 非同期の実装を最小の時間ロスで安全に行うものにするにはミューテックスによる同期が必要なわけで(以下無限ループ
141はちみつ餃子 ◆8X2XSCHEME
2022/02/23(水) 17:24:49.92ID:o4j3GXmb スピンロックは沼なんで、
OS が用意してくれとる仕組みを使えってことで FA 。
OS が用意してくれとる仕組みを使えってことで FA 。
142デフォルトの名無しさん
2022/02/23(水) 17:26:48.01ID:A1VwjaQk143デフォルトの名無しさん
2022/02/23(水) 17:30:05.39ID:lSALbkfN タイミング合わせるために工夫をこらしたプログラムってのは見ていて嫌な気分になるのう
8bit機なら全部ビジーウェイトでいいんだけど
8bit機なら全部ビジーウェイトでいいんだけど
144デフォルトの名無しさん
2022/02/23(水) 18:04:03.45ID:vCUIsgzX145デフォルトの名無しさん
2022/02/23(水) 18:13:52.21ID:A1VwjaQk 8bitのCPUなんて命令の消費clockでタイミング取るとか普通やん
146デフォルトの名無しさん
2022/02/23(水) 19:32:25.60ID:+QDyyf8g ウェイト気にするんだったらI/O周りでガチャガチャするより書き込み要求をキューで受け付ける専門プロセス用意しろよ
147デフォルトの名無しさん
2022/02/23(水) 19:34:41.10ID:lREuCbZK >>117
ありがとうございます、inline変数を試してみます
ありがとうございます、inline変数を試してみます
148デフォルトの名無しさん
2022/02/23(水) 19:41:23.72ID:lREuCbZK >>120
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。
クラスHogeは書いている通りシングルトンです。
よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。
visual studioでいうと、
Hogeが入っているプロジェクトと
mainのプロジェクト、
dllのプロジェクトの3つがあって
mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。
クラスHogeは書いている通りシングルトンです。
よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。
visual studioでいうと、
Hogeが入っているプロジェクトと
mainのプロジェクト、
dllのプロジェクトの3つがあって
mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
149デフォルトの名無しさん
2022/02/23(水) 20:42:20.48ID:vCUIsgzX150デフォルトの名無しさん
2022/02/23(水) 20:50:56.75ID:vCUIsgzX >>146
結局ここまで全部要件の問題ということで・・・
結局ここまで全部要件の問題ということで・・・
151デフォルトの名無しさん
2022/02/23(水) 21:10:52.14ID:A1VwjaQk Hogeのヘッダとlibファイルをmainとdllのプロジェクトに追加するだけの話じゃないのか。
152デフォルトの名無しさん
2022/02/23(水) 21:37:03.52ID:vCUIsgzX >>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で確認)
こんな感じになってるんだと思う
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で確認)
153デフォルトの名無しさん
2022/02/23(水) 21:55:19.66ID:PssNo99E154デフォルトの名無しさん
2022/02/23(水) 22:10:26.11ID:vCUIsgzX155デフォルトの名無しさん
2022/02/23(水) 22:31:49.11ID:PssNo99E 質問者ではないけど俺は.hで完結させたい人種なので「dll側かexe側に変数の実体を作らなきゃいけない」という縛りを極端に嫌ってる
dllとも変数実体を共有したいなら.h完結を諦めて
・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる
ぐらいしかまともな回答は思いつかん
どうせ複数dllから1つの変数を共有したいって話にもなるから
実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
dllとも変数実体を共有したいなら.h完結を諦めて
・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる
ぐらいしかまともな回答は思いつかん
どうせ複数dllから1つの変数を共有したいって話にもなるから
実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
156デフォルトの名無しさん
2022/02/23(水) 22:49:56.05ID:A1VwjaQk hogeの実装がどこにあるべきか決めてないとな。COMにするという手もあるな。
157デフォルトの名無しさん
2022/02/23(水) 23:10:37.89ID:vCUIsgzX 質問者本人の匂いがプンプンするけど、全部ヘッダならそもそもlibやdll要らないでしょ
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある
管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。
COMにするならもうC#で作ればいいのにと思ってしまう。
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある
管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。
COMにするならもうC#で作ればいいのにと思ってしまう。
158デフォルトの名無しさん
2022/02/23(水) 23:14:23.43ID:bb+gp0i+ Linuxには名前付きミューテックスないだっけ?
プロセス間の排他制御にflock使った思い出
プロセス間の排他制御にflock使った思い出
159デフォルトの名無しさん
2022/02/23(水) 23:19:02.33ID:kWD6+CX1 pthreadにあるやつが使えるからあるんでしょう
160デフォルトの名無しさん
2022/02/23(水) 23:19:54.09ID:kWD6+CX1 mutexっていうかセマフォ使ってるかも
161デフォルトの名無しさん
2022/02/23(水) 23:33:12.25ID:vCUIsgzX 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使ってないのでよく知らない
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使ってないのでよく知らない
162デフォルトの名無しさん
2022/02/23(水) 23:43:27.24ID:bb+gp0i+ なるほどLinuxもセマフォは名前付きがあるのね
ありがとう!
ありがとう!
163デフォルトの名無しさん
2022/02/23(水) 23:44:52.39ID:kWD6+CX1 条件変数が一番好きです
164デフォルトの名無しさん
2022/02/24(木) 02:08:55.88ID:9O+r6lMK そのへんが全て最初から言語の型として標準で装備されていて
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
165デフォルトの名無しさん
2022/02/24(木) 02:43:58.81ID:tiwBzbY0 openMPを使いたいけど使うと言えない
166デフォルトの名無しさん
2022/02/24(木) 03:32:22.22ID:+hdCiApF どうやってスレ立てるの??
167デフォルトの名無しさん
2022/02/24(木) 03:59:43.03ID:D634csZp168デフォルトの名無しさん
2022/02/24(木) 15:54:24.18ID:ZFLA2QwP メモリ上で連続した多次元配列を動的に確保したいんですけど、どうするのがスマートなやり方ですか?
169デフォルトの名無しさん
2022/02/24(木) 16:09:23.68ID:tiwBzbY0 多次元配列を宣言する
170デフォルトの名無しさん
2022/02/24(木) 16:12:31.94ID:MBzpszCI171デフォルトの名無しさん
2022/02/24(木) 16:25:32.45ID:xAP0ZjRZ スマートが何処にかかるのか
172デフォルトの名無しさん
2022/02/24(木) 16:32:30.77ID:cGpWV2sd またスマートとか自分の希望要件すら言語化できないアホな質問来てるな・・・
いっぺん真で頭ガチャするのがスマート
いっぺん真で頭ガチャするのがスマート
173はちみつ餃子 ◆8X2XSCHEME
2022/02/24(木) 16:42:22.24ID:KIw+63Ii 「動的に確保」というのも、コンストラクトの時点で大きさが確定するというのと
後から伸長する可能性も含むというのでは事情が違う。
後から伸長する可能性も含むというのでは事情が違う。
174デフォルトの名無しさん
2022/02/24(木) 17:02:25.64ID:ZFLA2QwP >>173
VLAのように実行時に全体の大きさを指定したいです
VLAのように実行時に全体の大きさを指定したいです
175デフォルトの名無しさん
2022/02/24(木) 17:05:32.25ID:M4s9COHd mallocや
176デフォルトの名無しさん
2022/02/24(木) 17:34:08.45ID:cGpWV2sd 小出しにしてんじゃねーよw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw
そんなこともできなければ真でくれと言われてるのw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw
そんなこともできなければ真でくれと言われてるのw
177デフォルトの名無しさん
2022/02/24(木) 17:38:54.01ID:MBzpszCI178デフォルトの名無しさん
2022/02/24(木) 17:40:07.73ID:MBzpszCI あるいは、CのVLAをC++で操作できるようにしたいのか?
179デフォルトの名無しさん
2022/02/24(木) 18:26:58.76ID:qnUKy4cC 初心者ですまんがVLAってvectorで代用できないの?
180デフォルトの名無しさん
2022/02/24(木) 18:34:10.20ID:xAP0ZjRZ つvalarray
181デフォルトの名無しさん
2022/02/24(木) 19:04:00.53ID:7WoYZRJz 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;
みたいのでええんか?
大体こういうの自分で作るとバグらせるからあんまやりたくないけど
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;
みたいのでええんか?
大体こういうの自分で作るとバグらせるからあんまやりたくないけど
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか… [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★6 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- ナイツ塙が指摘のローソンコーヒーカップ、ロゴ「L」で誤解生みデザイン変更へ 在庫使い切る3か月後にリニューアル [muffin★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 中国国営メディア「沖縄は日本ではない」…★7 [BFU★]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
- ケンタッキーの○○○バーガーという予告がアレを想起すると話題に [523957489]
- 【悲報】中国→日本行きの航空チケット、高市有事の影響で50万人分がキャンセルされる [834922174]
- 【乞食速報】UFJが5万円配ってる。これもう早苗給付金だろwwwwwwww [201193242]
- 【悲報】早速高市首相のせいで全国の民泊でキャンセルラッシュwwwwwwwwwwww 経営者も嘆き「こんな事は初めてだ…」😲 [871926377]
