C++相談室 part145

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:13:24.60ID:/ygW08Jq
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part144
https://mevius.5ch.net/test/read.cgi/tech/1563769115/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.105【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1556142878/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)

----- テンプレ ここまで -----
2019/10/13(日) 17:23:50.21ID:Y5pFrXym
>>457
パイソン
2019/10/13(日) 17:31:01.31ID:9auzzyVZ
言語間のABIの違いを透過的にしたいのならアセンブラの出番だね
2019/10/13(日) 17:36:26.67ID:1+8oai62
まさにそういう用途で作られたluaとか
2019/10/13(日) 17:44:25.71ID:j3fG3YC6
>>457
今ならluaかjs(V8/ChakraCore/SpiderMonkey)だな。

【Lua】組み込み系言語総合 その7【Squirrel】 [無断転載禁止]©2ch.net
https://mevius.5ch.net/test/read.cgi/tech/1474536226/

pythonもできなくはないけど手軽とは言えない。
pythonを使いたい理由がなければやめておくのが吉。
2019/10/13(日) 18:10:48.99ID:pJwii1Hg
pythonは呼ぶ方で、呼ばれる方としてはほとんど想定されてないわな。
2019/10/13(日) 19:05:43.03ID:m8H1BiEu
lua以外無い
2019/10/13(日) 19:35:48.57ID:rjz838Ki
>>457
tcl
2019/10/13(日) 20:24:22.36ID:kfwaB+Y7
>455,456さんどうもです

エラーが出たらそうしてみます

リンク先を読んで見ましたが
自分には難しいのでそのページを手がかりに検索して(依存名で探してみた)
漸く理解出来た気がします

前にstd::を付ける付けないって話を何処かでしてい
自分的にはどうしたものだろうか?
って感じだったんですけど
adlやtwophasenameとかの解説と合わせて書いて有るのを呼んでいて
std::を付けるのはかなり重要なんだと思えてきた
今までnamespaceって単なるグループ名を付けている
くらいの感覚だったんですけど
意外と重要なんですね

どうもでした
2019/10/14(月) 15:05:53.73ID:rfaLGQBa
template<size_t N>
class Test{
public:
private:
int m[N];
};

上の様なクラスでコンストラクタでmを値を指定して初期化したいんだけどNの数は未定ではないですか。

こういう場合のコンストラクタの書き方ってどうすればいいのでしよう?
可変引数?
2019/10/14(月) 15:12:05.32ID:BPBGG2nS
コンパイル時に決まってないならvectorかなんかにするしかない
2019/10/14(月) 15:18:08.00ID:P81x9Tjl
templateパラメータの整数にはコンパイル時に決まらない数値は入れられない
2019/10/14(月) 15:28:00.19ID:qN7fFVrS
>>466
そもそも、そのような生配列は、デフォルトでは0初期化もされないので、
メンバ初期化子リストを使わなくても効率は落ちないので、
コンストラクタ内部で普通に代入演算子を使って初期化すればいい。
すると、単に任意個数の引数をコンストラクタに渡す問題になる。
それには、昔ながらの va_list を使って渡す方法と、
関数テンプレートやテンプレートクラスを使って、自分自身を一つずつ引数を
減らしながら呼び出していく方法の二通りある。
2019/10/14(月) 15:28:52.79ID:Y7o3BEyU
>>466
Test(std::initializer_list<int>&& arg)
{
std::copy_n(std::begin(arg), N, std::begin(m));
}
2019/10/14(月) 15:30:45.59ID:rfaLGQBa
>>469

一度考えたのはテンプレートの可変引数なんですが

//Testのコンストラクタ
template<typename... T>
Test(T... args):m{args...}{
}

templateの可変引数の為にどんな型でも一致してしまい、そのくせにdoubleからintなどの変換をしてくれないのでinitializer_listを引数に出来たり、もしくはもっといい初期化方法があるのかなと思った次第です。
2019/10/14(月) 16:18:31.70ID:1VO4fG6M
http://ideone.com/TPZu2J
2019/10/14(月) 16:48:34.42ID:REdvl5Gt
>>471
>そのくせにdoubleからintなどの変換をしてくれないので
この点に関しては、以下の拡張展開でいけるはず。
template<typename... T>
 Test(T... args):m{((int)args)...}{
}
2019/10/14(月) 16:55:25.15ID:REdvl5Gt
templateの「非型引数」を使えば、理論上は、
template<int...args>
Test(int...args):m{args...}{
}
と書ける可能性はあるかもしれないけど、試してみてないので分からない。
2019/10/14(月) 17:04:44.38ID:REdvl5Gt
C++11 から、template 仮引数(パラメーター)に非型パラメーターパックが使える。
分かっているとは思うけど、このパックとは可変長引数をまとめて入れる容器の様な意味。
実際にやってみてないのでわからない。

https://en.cppreference.com/w/cpp/language/template_parameters

【Non-type template parameter】
type ... name(optional) (3) (since C++11)
3) A non-type template parameter pack with an optional name.
2019/10/14(月) 17:48:47.38ID:DdI7aqm2
>>466
要素数がコンパイル時に決まってるなら std::array 使って Test<3> x{{1,2,3}} とすることは簡単にできそう。
477デフォルトの名無しさん
垢版 |
2019/10/14(月) 20:20:29.10ID:ljIrzJ7B
>>464 >>457
tcl + 1
478デフォルトの名無しさん
垢版 |
2019/10/16(水) 00:49:52.16ID:4OT/K/L6
>>473 Thank you!!
2019/10/18(金) 03:20:02.11ID:kbBE7aSe
他クラスのメンバ関数テンプレートを呼び出すときってtemplateキーワードを関数名の前に付けないと
operator<と間違われてエラーになりますですよね?具体的に例をあげてみますと

https://wandbox.org/permlink/F7zl1fDh3qc216hd

これの t.template func<T2>(); のところですが、実はこのtemplateキーワードを外しても
WindowsのVisualStudioだとコンパイルが通ってしまいます。
これってVisualStudioが規約違反しているという理解で合っていますか?
2019/10/18(金) 03:32:35.18ID:L8qU11hp
vsのバージョンは?
2017の途中からtwo phaseに対応しだしてtemplate周りの怪しい挙動は大分改善された
2019/10/18(金) 11:35:03.93ID:kGqx1xn0
>>480
Express 2017 for Windows DesktopとProfessional 2019で確認しています
準拠モードを「はい」にしたら標準の規約に従うのかと思ったんですが変化なしでした

開発はWindowsでしつつもWindowsとLinuxどちらでもコンパイルできるようにしたいんですが
もしかしてそう簡単な話ではないんですかね
2019/10/18(金) 12:11:07.40ID:8CoI4J3v
>>481
visual studio cmakeプロジェクトでググる
2019/10/18(金) 15:49:49.04ID:/qIwU54Z
effective modern c++のnoexceptの項読んで思ったんだが、
C++の関数内でCの関数(具体的にはOpenGLとか)を呼び出した時に
C++側でcatchできる例外って具体的にどんなものがあるの?

試したことないけどmalloc失敗でbad_allocは飛ばないよね?
2019/10/18(金) 18:57:22.15ID:eJANlQqR
Windowsなら構造化例外とか
2019/10/18(金) 19:16:01.68ID:rTjJuJDg
>>482
cmakeってビルドに関するものだったような?
ソース自体はWindowsとLinuxで完全同一にしたいんですが
あれなんか自分勘違いしてるかな

とりあえずcmakeくぐります、有難う
2019/10/18(金) 19:19:00.58ID:5559SrY6
VCコンパイラがWindows専用だからcmakeだけでは解決しない
clangオプション使えばいけるんじゃね
2019/10/18(金) 19:27:02.65ID:BPo3Wxa0
cmakeってなんとなくしか使ってないんですけど何なんですか
OpenCVのソースをビルドするときに使いましたけど、cmakeした後にまたVisual Studioでコンパイルする必要があるのはなぜですか
2019/10/18(金) 21:38:24.25ID:1VxWd/yq
>>487
cmakeってmakeの代用じゃなくてmakefileとかxxx.slnとかを作るソフト
なのでcmake実行後に各々の環境にあったビルドを行う
2019/10/18(金) 22:32:33.72ID:HsDKWWc7
>>487
ビルドするためのスクリプトを作るツール、みたいに考えるといいよ
linux環境ならLinux用のものを作ってくれる
makeだと基本はlinux専用だし、.slnや.vcxprojはwindows専用だから、両方を面倒見るのは大変でしょ
490デフォルトの名無しさん
垢版 |
2019/10/18(金) 22:48:18.41ID:f2FG8XiO
ビルドするためのスクリプトを作るためのスクリプトを作るためのスクリプトなんてよくある話だよ。
2019/10/18(金) 22:49:57.04ID:a3uRi/Ig
秘伝のタレな
2019/10/18(金) 23:06:23.18ID:liCy40EB
GNU autotoolsをまともにいじる輩は消え去ったという現実をcmakeも味わうことになる。
バカは同じ間違いをする。歴史も見ずに。
2019/10/19(土) 00:19:02.04ID:JKxr+RAJ
CMakeってKitwareっていう大学発ベンチャーから出てきたやつだよな
もとはVTKとか可視化用ライブラリ開発してるしがないベンチャーだったのに
CMakeのおかげでやたら顔が知られるようになった
2019/10/19(土) 00:40:35.72ID:kiA3Djjo
VTKとparaviewの方が有名じゃなかったのか
2019/10/19(土) 00:44:42.31ID:JKxr+RAJ
ParaViewは最近になって有名になってるけど所詮はVTKのラッパーでしょ
CMakeのほうが影響度はでかいと思う
ベンチャーでここまでやれたなら大成功な事例だね
2019/10/19(土) 00:58:43.11ID:kiA3Djjo
cmakeより前から有名じゃね?
2019/10/19(土) 01:00:35.87ID:4XSJxZBk
cmake邪魔くさい
Makefile.am, configure.acからautoreconfしてconfigure作る方が楽。
windows用もmingwでクロスビルドしちゃえば楽だし。
WSLでwindowsからも見えるパスでビルドすると作ったwindows用binaryをすぐに起動できるしいうことなし
2019/10/19(土) 01:28:27.26ID:kDntEbbb
mingw使わずに標準のwindowsの環境で使えるようになってから出直してきて
2019/10/19(土) 01:36:12.28ID:+xsHXYvs
mesonいいぞー
2019/10/19(土) 01:37:16.21ID:JKxr+RAJ
makeとかのビルドツールって超重要なはずなのにおざなりな状況になってるのは不思議だ
なんとかしてくれ
2019/10/19(土) 01:49:35.75ID:kiA3Djjo
クロスプラットフォームなソフト作るにしても、成果物が対象の環境で動けば良い訳で、ビルドをどの環境でも出来ることにそれほど意味はないからね
てかunix系でgccやclang使って開発しているものをVCに入れても謎の独自仕様でコンパイルできないとかザラだしね
2019/10/19(土) 04:05:50.65ID:kDntEbbb
>>500
そう言って立ち上がった人は100億人くらいいたが誰一人として帰ってくる者はいなかった
2019/10/19(土) 04:25:19.36ID:Qviva8VV
>>502
ほんとこれw
2019/10/19(土) 07:26:21.05ID:4XSJxZBk
>>498
wslでmingwクロス環境はマクソ提供だけど
2019/10/19(土) 09:24:58.31ID:wYu0/eCZ
あらゆるビルドツールは怪獣化して、怪獣を飼いならすためのラッパーが必要になり、そしてそのラッパーももれなく怪獣化する
歴史が証明しており例外はない
2019/10/19(土) 09:25:25.42ID:WQwZNfDO
会社でifstreamのファイルオープンがエラーになるのはなぜなのか不明。assert()で引っかかる。
Visual Studio 2008コマンドプロンプトでコンパイルしたプログラムで、コードは単純化
して示したものが下記のようなもの。
std::ifstream ifs1;
for (n = 0; n < 8; ++n) {
ifs1.open(s[n].c_str());
assert(ifs1); // もしくはassert(ifs1.is_open());
関数(ifs1);
ifs1.close();
ifs1.clear();
}
コーディング上に間違いがあるのかいな。ファイルが使用中のためにエラー
でもないようだし。
よくわからんからCのFILE *に変更して対処したけどコンパイラの欠陥か。
ifstreamを宣言した後に ifs1.clear(); が必要なのか。
2019/10/19(土) 09:50:39.86ID:wYu0/eCZ
ifsreamってcloseの後に再使用できる保証あったっけ?
ifs1の宣言をfor文の中に入れて毎回オブジェクト作り直す方が無難に見える
2019/10/19(土) 09:51:32.93ID:wYu0/eCZ
宣言じゃないや定義
2019/10/19(土) 09:54:59.18ID:Xn59Im0u
makeが複雑なんじゃなくて
多様な環境すべてに対応するように書くことが複雑なわけで。
だったらdockerなり使って一つの環境だけでの提供を考える方が楽。
2019/10/19(土) 11:50:11.90ID:Xq/UOX2V
>>506
まずファイル開く権限あるのかな
最近それで引っかかった
2019/10/19(土) 12:33:25.60ID:IyvFodwr
>>484
あれ、Winの構造化例外ってそもそもtry..catchには引っかからなかったような……
2019/10/19(土) 12:41:43.65ID:IyvFodwr
Rakefileを使っている俺は小数派。

>>506
古いVCの場合ifstreamのclear()後再使用はできなかった記憶がある。
513デフォルトの名無しさん
垢版 |
2019/10/19(土) 13:51:45.42ID:2wK0PqU+
C++でv8のjavascriptを使うために
インストールしようと色々やってるんだけどどうにもうまく行かない。

https://qiita.com/mofumonta/items/ef3d890e13a7c1701748
このサイトを参考にしながら進めてるんだけど
「depot-toolsインストール」の環境変数を通す項目で
C:\v8\depot_tools\win_tools-2_7_6_bin\python\bin
このパスがダウンロードしてきたdepot-toolsにはないんだけど、
どこにあるか誰か知りませんか?

スレチだったらごめんなさい。
514デフォルトの名無しさん
垢版 |
2019/10/19(土) 14:48:33.14ID:g7gJ/kc1
おま環
何をダウソしたかくらいは書け
515デフォルトの名無しさん
垢版 |
2019/10/19(土) 15:03:15.21ID:g7gJ/kc1
python2.7 が既に入ってるなら
その bin に path 通しとけば良いんかな
2019/10/19(土) 15:14:23.88ID:Q3nSZoDU
>>483
C の関数が呼び出すコールバックを C++ で書いた場合、環境によってはコールバックからの例外が
C の関数を通過してくる。環境によっては通過できずに terminate() するけど。
厳密に「Cの関数」じゃなくなるけど qsort(), bsearch() については例外が通過できるものと規定されている。
あとは未定義動作となる場合の反応として例外が飛んでくることはあるかもしれない。
517デフォルトの名無しさん
垢版 |
2019/10/19(土) 15:22:29.09ID:2wK0PqU+
>>514
忘れてた。スマヌ。
Windows10 X64
Visual Studio Community 2019
Python 3.7.4(64-bit)
Git version 2.23.0.windows.1

ダウンロードしたのは
https://chromium.googlesource.com/chromium/tools/depot_tools.git
ここから「x64 Native Tools Command Prompt for VS 2019」
で「git clone」を使ってダウンロードしました。

>>515
python自体のbinフォルダは試してませんでした。
ちょっとやってみます。
518デフォルトの名無しさん
垢版 |
2019/10/19(土) 15:27:23.69ID:g7gJ/kc1
OS とかツールは全部違うけど
https://chromium.googlesource.com/chromium/tools/depot_tools.git
これ clone しても確かに win_tools-2_7_6_bin は無かった
2019/10/19(土) 15:29:04.62ID:ydKYIai+
何故公式のインストール手順を読まないのか
2019/10/19(土) 19:15:58.17ID:fDUUZQql
Node.js じゃ、ダメなのか?
2019/10/19(土) 20:05:28.35ID:+xsHXYvs
>>511
なんか設定次第で引っかかるようにならなかったっけ・・・
522517です
垢版 |
2019/10/20(日) 17:45:24.74ID:njFFTJVf
>>519
インストール手順自体は試したんだけど、
あまりに訳わからんちんで途中で断念して
他のサイトを見ながら入れようとしています。

>>520
Node.jsってv8の上に乗っかったjavascriptというイメージなんだけど、
C++から呼び出せるのでしょうか?
2019/10/20(日) 20:19:16.97ID:hyX4MvIl
今、YappyCamという録画ソフトを作っています。以下のソースをご覧下さい。

https://github.com/katahiromz/YappyCam/blob/master/sound.hpp
https://github.com/katahiromz/YappyCam/blob/master/sound.hpp#L125
https://github.com/katahiromz/YappyCam/blob/master/sound.cpp#L154

このSoundが音声を扱うクラスになっております。
スレッド関数Sound::ThreadProcで録音処理を行っています。
std::vector<BYTE> m_wave_dataがサウンドバッファです。
Sound::FlushDataがバッファを吐き出す関数です。

現在、SSDが主流になりつつありますが、ハードディスクでもトラブルなく使えるようにしたいです。いくつか質問します。

1.m_wave_dataをstaticな固定バッファにすべきか。するとすればどれぐらいの容量か。
2.もっといいバッファリングの方法はないか。

お願いします。
2019/10/20(日) 21:02:47.12ID:hyX4MvIl
スピード命です。フレーム落ちは絶対にダメだそうです。
2019/10/20(日) 21:06:32.98ID:I/H74RW7
古臭いスタイルはさておき・・・
(別にそれでいいと思うよ)

なぜバッファリングしてる?
vectorにためずにwriteしたらいいじゃん
readとwriteの単位が合わないとか?
バッファリングするならreader/writerで別スレッドにした方がいいかもね

オーディオの処理なんだからおれなら動的メモリ確保の走るvectorは使わないね
最悪システムコールだから音が途切れる可能性が高まる
一瞬かもしれないが音は少しでも途切れるとノイズになる

最適なバッファ量はそのルーチンがどれぐらいのジッターで駆動してか計測して決めればいい
あとバッファリングすればそれだけ遅延が発生するから注意
本来ビデオ側と同期をとる必要あるけどPCだと適当だよな
CE機器だと完璧に合わせるけど
2019/10/20(日) 21:15:47.21ID:PJrfugKB
COBOLのWRITE命令みたいに非同期書き込み&バッファローテーションてか?
あの当時のアホOSならともかく今どきアプリでそんなことせにゃならんか?
ベアメタルなら面白そうだけど
2019/10/20(日) 21:16:42.61ID:Vt7fKSBc
遅延の原因は、vector::insert()でしょ。
2019/10/20(日) 21:24:56.14ID:akKR2ina
ズらすの?
2019/10/20(日) 21:27:13.38ID:peAHiKUT
誰がハゲやねん
2019/10/20(日) 22:12:11.93ID:2g822Cxo
ああそうか。std::FILE/CreateFileそのものがバッファリングしてるんだ。ならば下手なバッファリングは必要ないと。

普通にI/Oすることにします。ありがとうございます。
2019/10/20(日) 22:21:50.50ID:2g822Cxo
std::vectorのメモリー動的確保は音声処理では不味いと。

ハードディスク環境でジッターを測定して見ないと。わかりました。
2019/10/20(日) 22:32:55.48ID:I/H74RW7
>>530
ただそのスレッドでwriteするのが問題ないかはよく確認した方がいいよ
writeでブロックされることで音声のソース側の処理が滞る可能性がある
その場合はやっぱり別スレッドにすべきだね
2019/10/20(日) 22:59:16.11ID:2g822Cxo
プログラム高速化の禁術
https://qiita.com/kotauchisunsun/items/84e01c6fb621fcc1a647
2019/10/20(日) 23:12:22.20ID:2g822Cxo
setvbufって便利な関数を見つけた。これ使うか。
2019/10/20(日) 23:13:52.92ID:fVQAzz8M
音声のバッファリングには普通はリングバッファを使う
2019/10/20(日) 23:28:56.20ID:2g822Cxo
ここまでのまとめ。

リングバッファを使う。
十分大きなバッファサイズでsetvbufを使う。
リングバッファへの読み書きは別スレッドにする。
バッファが空のときはイベント待ちで休ませる。
537デフォルトの名無しさん
垢版 |
2019/10/20(日) 23:44:50.34ID:Vt7fKSBc
別スレッドにキューイングするのに適したC++標準クラスは何かな?
2019/10/21(月) 06:50:33.92ID:iwcvXj42
ゴチャゴチャ言うならビルトイン配列使っとけ
539デフォルトの名無しさん
垢版 |
2019/10/21(月) 15:01:03.56ID:c9dhXgWB
C++から呼べるし
C++を呼べる
2019/10/21(月) 15:43:44.16ID:M4XH2/Bk
>>537
Queue への読み書きは、1要素当たりは短時間で済むことが多いので、
Queueを読み書きする場所で、必ず Critical Section などで囲むと良い。
一度に沢山の要素をまとめて書き込みたい場合は、原則的には、
1要素を書き込む処理をこまめに、Critical Section で囲むようにする。
必ずしも1要素ずつ囲む必要は無いが、こまめに囲った方が、
別スレッドの待ち時間が減ることが期待できるが、その意味が有る場合と
無い場合とが有る。
Critical Section の代わりに、Mutex や Semaphore などを使うことも出来る。
2019/10/21(月) 17:20:19.00ID:Yxovtd3S
キャッシュに配列を置けばいいじゃねえか
かんたんだろ

APUの近くに配列でOK
複雑なデータ構造なんて考える必要ナシ
2019/10/21(月) 18:19:39.76ID:iwcvXj42
タイミングで問題が出てるのにvectorにこだわるのはアホだよな
2019/10/21(月) 18:33:52.73ID:K8Ck/3Ch
実行時のパラメータでバッファサイズ可変にするならvectorで始めにresizeしておくのが楽
size使える分配列のunique_ptrより取り回しも楽だし
2019/10/21(月) 18:43:04.52ID:Kc9FjQwr
boostにリングバッファのクラスあるよ
2019/10/21(月) 18:50:23.92ID:LVq8IpRv
天才だから自分でリングバッファ作った。
https://github.com/katahiromz/YappyCam/blob/master/ring.hpp
2019/10/21(月) 19:22:51.62ID:ICV7tWge
バッファがいっぱいになったらどうしよう?
547537
垢版 |
2019/10/21(月) 19:27:27.31ID:iqf1snDW
>>540
それらの同期機能って標準C++のクラスだけで実現できるもんなの?
2019/10/21(月) 19:30:51.93ID:Kc9FjQwr
>>546
捨てるしかないだろ
2019/10/21(月) 20:56:31.15ID:NgTxqwl+
>>547
どこまでを標準と言ってるのか知らんけどお前の考える標準でスレッドをサポートしてるならたいてい同期機構もあるはず
2019/10/21(月) 21:02:21.32ID:LVq8IpRv
>>547
WindowsではCriticalSection, CreateMutexなどがあったからC++11以前でも使えた。
C++11からstd::mutex, std::lock_guardなどが使えるぞ。
2019/10/22(火) 00:25:01.95ID:IM/z9Y8P
ロックフリー的ななんか無かったっけ?
2019/10/22(火) 16:18:00.26ID:QN5InCe0
リングバッファの排他制御どうするか?

push/popごとにロックかけたら遅くなりそう。
2019/10/22(火) 16:36:38.23ID:LzjGZCpL
>>545
stlライクにしてる割にコピーやムーブが内部の値ベースなのおかしくない?
2019/10/22(火) 17:03:31.86ID:mzkWHCb9
用途的に
reader 1
wrtier 1
だと思うけどそれならwait freeな実装が可能
read pointer/writer pointerで制御するやつね
かつかつに最適化するならこれ

しかしその前にどれだけの頻度と長さで排他の衝突するか見た方がいい
リアルタイムのオーディオなら短くても5msec周期とかじゃないか
かつlock中に多少のメモリの読み書きやってるだけなら排他が必要な時間は短い
なら素朴にmutex1個でのロックで十分な可能性も高い
同期のミスはデバッグがつらいから不用意に難しいことしない方がいい

もしくはある程度のバッファリング(遅延)が許容できるとか、固定長の処理であるなら
ならバッファを複数用意してダブル、トリプルバッファ的な制御でもいいだろう
つまりwriter側でバッファに全部書き終わったらそのバッファをreader側のキューにいれる
reader側は全部読み終わったらwriter側のキューに戻す
っての

とにかく原則どおりまずシンプルにミスなく作って計測して最適化ね
2019/10/22(火) 17:19:01.36ID:mzkWHCb9
ringのソース見たけど
おれはm_full なしでやるのが好みだな
つまりm_front_indexとm_back_indexが一致するのはemptyのときのみ
full時には実際は1個空きがある状態

これを推し進めればwait freeの実装に近づけるぞ
車輪の再発明だが勉強にはなる
2019/10/22(火) 17:21:45.79ID:2ZhQSHmS
>>551
std::atomicとかあるね
原理的に競合が起きないやつ
2019/10/22(火) 17:29:01.30ID:QN5InCe0
まずは記憶媒体の性能を計測してみた。
https://github.com/katahiromz/YappyCam/blob/master/tests/diskrate/diskrate.cpp
https://twitter.com/katahiromz/status/1186558848393285633
これはSSDの場合だ。HDDでも同様に計測しないといけない。
https://twitter.com/5chan_nel (5ch newer account)
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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