C++相談室 part159

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2022/02/19(土) 11:56:42.14ID:kSnJ/KwP
前スレ
C++相談室 part158
https://mevius.5ch.net/test/read.cgi/tech/1636969758/
2022/02/23(水) 16:58:57.65ID:lSALbkfN
同期オブジェクトってそんな低レベルで存在しとる概念なのかね
2022/02/23(水) 17:06:44.05ID:o4j3GXmb
同期オブジェクトを機能させるためにスケジューラに負担をかけるので
待機時間が特に短いことがわかってるならスピンロックのほうが性能は出る可能性はある。
でもスピンロックを正しく実装できる気がしない。

同期のための仕組みを用意してくれてるんだからそれを使っておくのが基本的には楽だよ。
待機時間 100ms のところを 10ms とかに短縮できたところでなんだというんだ。
それが必要な場合もあるといえばあるけど、どちらがより良いかは状況による。
2022/02/23(水) 17:12:13.15ID:UVDZkpPA
>待機時間 100ms のところを 10ms とかに短縮できたところで
プロセスAがファイルのアクセス権を握り続けている間、
プロセスBがファイルシステムを10 ms周期でcallすることになるな!
2022/02/23(水) 17:17:22.47ID:A1VwjaQk
消費ってCPUリソースの話じゃないのか。
書き込みに100msの待機が問題となるようなリアルタイムな要件があるならともかく
ファイルの書き込みなんていう遅いものは非同期の実装に頭使うほうが効率的だろう。
2022/02/23(水) 17:21:14.59ID:UVDZkpPA
非同期の実装を最小の時間ロスで安全に行うものにするにはミューテックスによる同期が必要なわけで(以下無限ループ
2022/02/23(水) 17:24:49.92ID:o4j3GXmb
スピンロックは沼なんで、
OS が用意してくれとる仕組みを使えってことで FA 。
2022/02/23(水) 17:26:48.01ID:A1VwjaQk
>>136
同期は機械語レベルの話じゃけんのう。
尻拭いの案件でよく見るが間違ってもCでグローバル変数でif文で切り分けとかしないでくれよ。
OSが提供する同期オブジェクト使うんだ。
2022/02/23(水) 17:30:05.39ID:lSALbkfN
タイミング合わせるために工夫をこらしたプログラムってのは見ていて嫌な気分になるのう
8bit機なら全部ビジーウェイトでいいんだけど
2022/02/23(水) 18:04:03.45ID:vCUIsgzX
>>94のコードでコメントを外してビルドし、端末を2つ開いてほぼ同時にそれぞれ
./実行ファイル名 hoge1
./実行ファイル名 hoge2
で実行してやると分かるけど、オープンはできていて書き込みも行われるよ

ポーリングで見ようがロックできなければ>>101の解説どおり危険な瞬間(同時にAPIが呼ばれる瞬間)は必ず発生してしまう。
ポーリング間隔0をスピンロックとかビジーウェイトと言ってるのだと思うが、用語の使い方は置いておいて、0でも同様。
2022/02/23(水) 18:13:52.21ID:A1VwjaQk
8bitのCPUなんて命令の消費clockでタイミング取るとか普通やん
2022/02/23(水) 19:32:25.60ID:+QDyyf8g
ウェイト気にするんだったらI/O周りでガチャガチャするより書き込み要求をキューで受け付ける専門プロセス用意しろよ
2022/02/23(水) 19:34:41.10ID:lREuCbZK
>>117
ありがとうございます、inline変数を試してみます
2022/02/23(水) 19:41:23.72ID:lREuCbZK
>>120
コードは手元(スマホ)にはないので貼れないです、すみませんが日本語で理解してもらえると助かります。
クラスHogeは書いている通りシングルトンです。
よく分かっていませんがHogeは静的ライブラリ?というのでしょうか。
visual studioでいうと、
Hogeが入っているプロジェクトと
mainのプロジェクト、
dllのプロジェクトの3つがあって
mainとdllのプロジェクトの両方が「参照」でHogeが入ってるプロジェクトを依存関係?構築してます。
2022/02/23(水) 20:42:20.48ID:vCUIsgzX
>>148
日本語で説明できてないんだよw
今も確認が必要になってるだろ
問題は何?
シングルトンオブジェクトが、プロセス内に2つ(exe側とdll側)あること?
dllは遅延ロードするの?
2022/02/23(水) 20:50:56.75ID:vCUIsgzX
>>146
結局ここまで全部要件の問題ということで・・・
2022/02/23(水) 21:10:52.14ID:A1VwjaQk
Hogeのヘッダとlibファイルをmainとdllのプロジェクトに追加するだけの話じゃないのか。
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で確認)
2022/02/23(水) 21:55:19.66ID:PssNo99E
>>148
あーすまん.dllならinline変数でもダメだわ
.libとの変数共通ならいけるんだが
2022/02/23(水) 22:10:26.11ID:vCUIsgzX
>>152
どうせ昼間のIDの誰かが質問者兼>>153だと思うので面倒なので補足しておく。

もし>>149
> シングルトンオブジェクトが、プロセス内に2つ(exe側とdll側)あること?
がYesで
> dllは遅延ロードするの?
がNoなら
クラスSampleの宣言に__declspec(dllexport)を付けることで、1つにすることはできる。
ただし実体がdllに入るので、遅延ロードはできない作りになる。
2022/02/23(水) 22:31:49.11ID:PssNo99E
質問者ではないけど俺は.hで完結させたい人種なので「dll側かexe側に変数の実体を作らなきゃいけない」という縛りを極端に嫌ってる

dllとも変数実体を共有したいなら.h完結を諦めて
・実体生成用の1つのcppでだけ#defineでなんか定義して実体を定義させる
ぐらいしかまともな回答は思いつかん

どうせ複数dllから1つの変数を共有したいって話にもなるから
実体生成用のcppはexe側が受け持つか管理用のdll(質問者はやりたくないようだが)を作ることになるだろうな
2022/02/23(水) 22:49:56.05ID:A1VwjaQk
hogeの実装がどこにあるべきか決めてないとな。COMにするという手もあるな。
2022/02/23(水) 23:10:37.89ID:vCUIsgzX
質問者本人の匂いがプンプンするけど、全部ヘッダならそもそもlibやdll要らないでしょ
昔からstaticメンバ変数にその手のマクロが付いてるヘッダオンリーなライブラリもどきはある
管理用のdllなるものを作るにしたって、exportされるAPIとしてインスタンス生成用メンバ関数を直に紐付ける方法がないと、公開された生成方法が必要になり、シングルトンとして十分制限できない。
COMにするならもうC#で作ればいいのにと思ってしまう。
158デフォルトの名無しさん
垢版 |
2022/02/23(水) 23:14:23.43ID:bb+gp0i+
Linuxには名前付きミューテックスないだっけ?
プロセス間の排他制御にflock使った思い出
2022/02/23(水) 23:19:02.33ID:kWD6+CX1
pthreadにあるやつが使えるからあるんでしょう
2022/02/23(水) 23:19:54.09ID:kWD6+CX1
mutexっていうかセマフォ使ってるかも
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使ってないのでよく知らない
162デフォルトの名無しさん
垢版 |
2022/02/23(水) 23:43:27.24ID:bb+gp0i+
なるほどLinuxもセマフォは名前付きがあるのね
ありがとう!
2022/02/23(水) 23:44:52.39ID:kWD6+CX1
条件変数が一番好きです
2022/02/24(木) 02:08:55.88ID:9O+r6lMK
そのへんが全て最初から言語の型として標準で装備されていて
さらにコンパイルが通ればマルチスレッド時のデータ競合すら起きないことが保証されるRustが強いよな
2022/02/24(木) 02:43:58.81ID:tiwBzbY0
openMPを使いたいけど使うと言えない
166デフォルトの名無しさん
垢版 |
2022/02/24(木) 03:32:22.22ID:+hdCiApF
どうやってスレ立てるの??
2022/02/24(木) 03:59:43.03ID:D634csZp
>>166
https://cpprefjp.github.io/reference/thread/thread.html
2022/02/24(木) 15:54:24.18ID:ZFLA2QwP
メモリ上で連続した多次元配列を動的に確保したいんですけど、どうするのがスマートなやり方ですか?
2022/02/24(木) 16:09:23.68ID:tiwBzbY0
多次元配列を宣言する
2022/02/24(木) 16:12:31.94ID:MBzpszCI
>>168
「連続した」ってとこkwsk
ハード的な事情があったりするのか?
2022/02/24(木) 16:25:32.45ID:xAP0ZjRZ
スマートが何処にかかるのか
2022/02/24(木) 16:32:30.77ID:cGpWV2sd
またスマートとか自分の希望要件すら言語化できないアホな質問来てるな・・・
いっぺん真で頭ガチャするのがスマート
2022/02/24(木) 16:42:22.24ID:KIw+63Ii
「動的に確保」というのも、コンストラクトの時点で大きさが確定するというのと
後から伸長する可能性も含むというのでは事情が違う。
2022/02/24(木) 17:02:25.64ID:ZFLA2QwP
>>173
VLAのように実行時に全体の大きさを指定したいです
2022/02/24(木) 17:05:32.25ID:M4s9COHd
mallocや
2022/02/24(木) 17:34:08.45ID:cGpWV2sd
小出しにしてんじゃねーよw
質問者のお前が聞かれたことに答えるんじゃなくて、せめて満たすべき最低限の要件くらい自分で明確にしろと言ってるんだよw
そんなこともできなければ真でくれと言われてるのw
2022/02/24(木) 17:38:54.01ID:MBzpszCI
>>174
ということは最初の割り付けでサイズが確定していて
途中でresizeはできなくていいんだな?
2022/02/24(木) 17:40:07.73ID:MBzpszCI
あるいは、CのVLAをC++で操作できるようにしたいのか?
2022/02/24(木) 18:26:58.76ID:qnUKy4cC
初心者ですまんがVLAってvectorで代用できないの?
2022/02/24(木) 18:34:10.20ID:xAP0ZjRZ
つvalarray
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;
みたいのでええんか?
大体こういうの自分で作るとバグらせるからあんまやりたくないけど
2022/02/24(木) 19:07:44.67ID:cGpWV2sd
すでにバグってる気がする
2022/02/24(木) 20:00:57.06ID:1pzXIXf6
boostにあるけどオーバーエンジニアリングっぽいんだよな
2022/02/24(木) 20:30:12.93ID:cGpWV2sd
馬鹿にされたい馬鹿が小出しにしてる以上何とも言えないw
僕ちゃんboost使いたかったけど馬鹿だからよく分からないし、条件小出しなまま複数IDで汎用な答えが欲しいのぉって言ってるだけなのが透けて見えるw
2022/02/24(木) 20:38:21.09ID:I6df84hq
何の情報が必要かすら分かってない初心者かもしれないんだから聞き出してやればいいのに
煽って出てくると思ってるなら考え甘いぞ、要件引き出せないようじゃ半人前
2022/02/24(木) 20:59:04.53ID:cGpWV2sd
ちゃんとID変えて出てきてるし煽ってないし、僕ちゃん答えは欲しいのに分不相応なプライドだけ高くて素直になれないのぉって言われてもね
2022/02/24(木) 21:02:22.10ID:j0njw0Fu
一方すぐ質問者にマウンティングしたがるおまえはすぐわかるなw
2022/02/24(木) 21:03:10.18ID:MBzpszCI
> ID:cGpWV2sd

おまえイラネ
無駄にうるせえ
2022/02/24(木) 21:29:39.55ID:cGpWV2sd
こんなスレにいちいち相談する初心者なんてそうそういねーよ
もし初心者なら回答欲しいんだから何言われても何某か返事する
そういうのがなく単発IDなどが煽ってくるということはつまり・・・図星ってことw
2022/02/24(木) 21:36:30.68ID:j0njw0Fu
ここ覗いてるのって技術系の雑談ネタとしか思ってないだろうが、
毎回、単発IDで質問して逃げてるとしたらクソ野郎だな。
学生の課題か何かだろう。おれたちは利用されてるんだ!!!
2022/02/24(木) 21:50:54.34ID:p3uXF2gK
利用されるのが嫌ってこと?よくわからんが。
まぁ、学校の課題でズルしても本人のためにはならないんだから勝手にしとけって感じだな。
2022/02/24(木) 21:59:42.81ID:cGpWV2sd
>>190 >>191
そう、お前のことだよ質問者兼回答者君
ただ学生じゃなくて社会不適合者だと思うし、毎日アホな質問しちゃぁ俺に馬鹿にされてるのに飽きないね
2022/02/24(木) 23:03:53.08ID:I6df84hq
妄想えっぐ、糖質っぽいな
2022/02/25(金) 00:16:50.60ID:5F5cVQmS
在日君なんだろうな
2022/02/25(金) 01:06:42.45ID:xX3MCg4u
>>192
おれみたいなじーさんがおまえのような小便垂れの小僧に質問するわけないだろ…
2022/02/25(金) 11:25:19.29ID:xlKD2LUb
なんで const なオブジェクトは const なメンバ関数しか呼べないの?
2022/02/25(金) 11:29:01.84ID:uD2ZWt4n
メンバ関数でメンバ変数が書き変わるとconstオブジェクトとして困るから
2022/02/25(金) 11:29:09.22ID:KX/JNmq+
中が書き換わるかもしれないから
2022/02/25(金) 11:59:24.66ID:169sj97j
でもポインタで簡単に書き換えられるじゃん
2022/02/25(金) 12:14:57.98ID:mK/IikxE
意図的にconst外さなきゃconstのままだよ

何も考えずconst外すバカのことなんて知らん
2022/02/25(金) 18:43:59.10ID:xX3MCg4u
constが役にたった場面にあったことがない。
自分で書き換えといて「書き換わるかもしれない!!」とかどんだけ適当にコード書いてんだか。
2022/02/25(金) 19:05:22.20ID:kxjR7eze
constは積極的に使うことでI/Fを分かりやすくしたりできるね
書き換えない想定を明示的にして最適化しやすくする効果もある
意味的に正しいことが保証できないときにconstを使うと泣くこともあるけどw
2022/02/25(金) 19:11:03.22ID:xX3MCg4u
>>202
const使ったらコンパイラはどういった最適化するんだ?
2022/02/25(金) 19:12:37.70ID:pF12AA3R
constとprivateはテストの邪魔でしかない
使ってる奴は例外なく低脳
2022/02/25(金) 19:27:49.01ID:RMWkUPMB
privateはインテリセンスがすっきりしていいじゃん
2022/02/25(金) 19:38:04.25ID:kxjR7eze
>>203
実際にやってみろ
>>204
サンプル説明以外で可視性やconst使ってない馬鹿はエアプ
2022/02/25(金) 19:43:16.35ID:xX3MCg4u
自分で言い出しといて急にキレられてもな。
2022/02/25(金) 19:48:21.44ID:kxjR7eze
>>207
キレる?お前が調べもせずに聞いてくるから当たり前のことを言っただけだが
2022/02/25(金) 19:52:14.27ID:pF12AA3R
>>206
エアプは君だよ
製品レベルの緻密なテストセットをきちんと書き上げるためにはconstなしのオールpublicしかあり得ん
テストケースで様々な状態を作りだして動作確認するためには、全てを必要に応じて自由に書き換えられることが不可欠というもの
書き換え不可だのクラス専用だのの決め事は命名規則で担保するんだぞ
2022/02/25(金) 19:58:35.87ID:46L8HXzx
IFのシグネチャにconstついてないといちいち仕様書読まなきゃいけないから面倒くね?
char* token(char* str)とかあったら破壊的かどうか判別できん
2022/02/25(金) 20:00:20.50ID:gDL/lDyA
>>209
struct最強伝説キタコレ
2022/02/25(金) 20:04:09.41ID:Ttq2k6xT
>>211
staticおじさんの生まれ変わりだろw
2022/02/25(金) 20:04:09.42ID:kxjR7eze
>>209
https://github.com/trending/c++
この辺のプロジェクトのソースでもいいし、chromiumのソースでもいいし、見てみたら?
製品レベルのコード見せてみろよ
2022/02/25(金) 20:07:48.92ID:xX3MCg4u
const使ったらどんな最適化するんだろう? 言った本人はキレて答えてくれないし。
2022/02/25(金) 20:12:00.77ID:kxjR7eze
>>214
お前が1+1=って言ったら俺はお前のためにわざわざ2と言う必要があんのか?
自分で調べたことの事実を示せw
2022/02/25(金) 20:14:10.16ID:aDhOSI3t
Rustは何も指定しないとimmutable(不変)にしちゃったから、そういう点でもわかりやすく、かつ、テストやデバッグも少数のmutableなものだけ対象にすればよくなってるね
2022/02/25(金) 20:15:39.58ID:xX3MCg4u
>>215
全く必要ない。
キミは自分で言い出しといて逃げる人とよく分かったから他の人に質問してるだけ。
キミはスルーしてくれていいよ。
2022/02/25(金) 20:16:05.93ID:kxjR7eze
>>216
Rustは無関係なので巣に帰れ
2022/02/25(金) 20:32:18.12ID:6k09Uwld
constを使うのがいいことがよく分かった
2022/02/25(金) 20:39:24.80ID:xX3MCg4u
constウイルスと言わざるをえないアホ仕様
2022/02/25(金) 20:57:38.37ID:QBj91W6D
だからさ、釣り針が太すぎるんだよな
2022/02/25(金) 21:25:13.93ID:4EL5U7Bc
constついてないコードは九分九厘ごみ
絶対に自分一人で書き上げて絶対に一生涯外に出さない保証があるなら付けなくても良い
2022/02/25(金) 21:34:50.33ID:6k09Uwld
本に載るほどの支持を覆すほどの権威と実例があるわけもなく
2022/02/25(金) 22:44:59.40ID:RMWkUPMB
メンバ関数のconst修飾とか関数の引数のconstとかはわかるけど関数内部のローカル変数にconst付けるのはよくわからんな
2022/02/25(金) 22:51:54.69ID:a/ksSb5+
const お会いしたらお茶しませんか?
2022/02/25(金) 23:04:47.69ID:aDhOSI3t
>>224
コードが読みやすくなるし間違って書き換わることもないから
どの言語でもconstやそれ相当で宣言するのが最近は一般的
JavaScriptですらconstにするのが常識となった
2022/02/25(金) 23:07:46.96ID:vOr560R7
ここ数年constをつけて再代入しないのが当然になってますってjavascriptの専門家に言われて殴りたくなりました
2022/02/25(金) 23:13:07.22ID:aDhOSI3t
JavaScript程度はブラウザのカスタマイズしたり含めて誰でも使える言語だろ
まさかC++しか使えない新人かね
2022/02/26(土) 00:15:34.77ID:VmHIkvc0
Pythonにはconstもprivateもない
大文字だけの名前はconst、アンダースコア始まりの名前はprivateという規約があるだけ
でもそれでみんな勝手に書き換えるべきでないと了解されてて完全に成立してる
とはいえ言語機能ではないのでテストとかでの必要に応じて規約を無視して値を変えることもできる
こういう実例を見るとわざわざコンパイラ機能として書き換え禁を強要してるconstやprivateは偏執的過ぎると思う
2022/02/26(土) 00:23:17.69ID:xDf2Ellb
小さいオブジェクトにconst付けるとアドレスが割り振られて最適化が阻害されるみたいな話は聞いたな
2022/02/26(土) 01:13:30.79ID:fRC8OZTs
日付が変わってまた湧いてるw
>>229 pythonみたいなゆるゆる言語と比較してconst/privateがないとかw
>>230 その話URLで示してw
2022/02/26(土) 01:14:41.41ID:TNmFLFGs
ここまでconstつけると最適化されるという例はなし。
2022/02/26(土) 01:39:20.96ID:fRC8OZTs
ここまで何を調べたかの記述なしw
2022/02/26(土) 04:01:53.50ID:L9ZaKHY5
move、右辺値参照、各種オペレータなどフルセットで対応するライブラリ的なクラスならconst対応した方が良いけど、
末端のアプリケーションにまで全部律儀にconst付けるのは面倒くさいだけだわな
2022/02/26(土) 04:13:27.79ID:fRC8OZTs
そんなしょうもないものならわざわざC++で組むなよw 発想がアホの極みw
2022/02/26(土) 06:30:02.19ID:BX4iLvdt
Rustなどは無指定デフォルト時がC++でのconst状態になってるよな
楽でいいよな
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況