問題タブ [circular-buffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
574 参照

c - cmpeg-ts用の一定の時間遅延を持つ循環バッファ

Linuxのcで入力と出力の間に一定の時間遅延がある循環バッファを実装する最良の方法を教えてください。スレッドでバッファに書き込み、別のスレッドで読み取ります。読み取りと書き込みの間の一定の時間差を保存する必要があり、書き込みストリームのビットレートは可変です。ここで、数パケットごとにティンペスタンプを追加して同期し、1ミリ秒ごとにclock_gettimeを使用している別のスレッドからタイムスタンプを取得します。

0 投票する
0 に答える
663 参照

c - Linuxカーネルで/procファイルの読み取りスレッドと書き込みスレッド間の競合を解決するにはどうすればよいですか?

ディレクトリにファイルを作成するLinuxカーネルモジュールがあります/proc。私のモジュールには、ファイルの読み取りまたは書き込み時に呼び出される読み取り関数と書き込み関数があります。多くのバッファエントリを持つデータを保存するための循環バッファがあります。

ファイルが書き込まれると、モジュールは循環バッファにデータを書き込み、/procファイルが読み取られるときに読み取られます。

2 つのスレッドがある場合、1 つのスレッドがバッファー エントリに書き込みを行っているのと同時に、読み取りスレッドがそのバッファー エントリから読み取りを行っている可能性があります。

衝突はありますか?読み取りスレッドと書き込みスレッドの競合を解決するにはどうすればよいですか?

0 投票する
1 に答える
236 参照

c - pthreads / cond_signal / cond_waitを使用するときに1の循環バッファサイズを考慮する方法は?

スレッドを使用してファイルからデータを読み取り、任意のサイズのバッファーに書き込むプログラムを実装しようとしていますが、他の2つのスレッドはこのバッファーから情報を読み取ります。バッファサイズを1に指定した場合を除いて、すべて正常に動作します。指定すると、すべてがロックされます。私は多かれ少なかれここからの古典的な「消費者/生産者」の例を適応させてますこれが私のコードです:

私が使用している構造体:

私の「バッファに追加」スレッド

出力は次のようになります。

そして、それはただハングします。最初のwhileループを超えることは決してないことは明らかです。他のサイズでは機能しますが、1では機能しません。これに対する修正を実装する最良の方法は何でしょうか。これが役立つ場合は、これが私の「バッファから取得」メソッドです。

このエッジケースを処理するためのかなり簡単な修正があると確信していますが、私はそれを理解できないようです。任意の提案をいただければ幸いです!

編集:私も次のようにバッファを初期化します:

0 投票する
2 に答える
574 参照

ios - 循環ファイル ストレージを作成する方法はありますか? Linux の syslog のような

私の iOS アプリケーションでは、リモート サーバーから取得したいくつかのメッセージを保存したいと考えています。ただし、これらのメッセージを永久に保存する代わりに、N 個のメッセージを取得したらパージしたいと考えています。つまり、N が 10 に設定されている場合、10 個のメッセージを保存し、11 番目のメッセージの到着時に最初のメッセージを削除したいと考えています。

iOS でこれを行う標準的な方法はありますか? メッセージを保存するためのコードはまだ書いていないので、どの方法で保存しても問題ありません。

0 投票する
1 に答える
5661 参照

circular-buffer - リング バッファ サイズが 2 の累乗でなければならないのはなぜですか?

リング バッファ サイズが 2 の累乗でなければならないのはなぜですか?

0 投票する
2 に答える
148 参照

arrays - 循環バッファ(開始値が削除されます、どうなりますか?)

サーキュラー/リングバッファーに頭を悩ませようとしていますが、質問に少し行き詰まっています。

次のような線形キューがある場合:

66、20、30、40、19、空のスロット
0 1 2 3 4 5

フロント:0(66)、バック:5、長さ:5

値が削除された場合(0が最初に追加されたと考えると、0(66)が削除されると思います。

私の質問: 20はキューの最初になりますか?そして、その後のレイアウトはどうなるでしょうか?インデックス/ポインタ、またはその性質のものなど、何かが移動しますか?

ありがとう。

0 投票する
0 に答える
81 参照

.net - .NET で、最速の Write() メソッドを持つストリームを作成する方法

メッセージをソケット経由で送信することと併せて、メッセージを 2 つのファイルに記録するアプリケーションがあります。1 つのファイルはバイナリ表現を取得し、もう 1 つのファイルは人間が判読できる同等の表現を取得します。メッセージ クラスには、人間が読めるバージョンのメッセージをストリームに出力する関数があります。バイナリ表現は、メッセージ クラスで byte[] として使用できます。

送信メッセージ レートを最大化したいので、ロギング アクションはできるだけ迅速に行う必要があると感じています。

考えられるアプローチの 1 つは、単純にタスクを作成して各ログ アクションを実行し、メッセージ インスタンスへの参照を各タスクに渡すことです。このアプローチの問題点は、メッセージ インスタンスがプールされたオブジェクトであり、ある時点でプールに返さなければならないことです。複数のスレッドがメッセージ オブジェクトへの参照を保持しているため、メッセージ オブジェクトを最後に使用したスレッドが実際にメッセージ オブジェクトを返すように調整することは困難です。さらに、メッセージを送信する必要があるたびにタスク (または任意のオブジェクト) を作成したくありません。

Write() の最速の実装には、次の 2 つの特徴があると思います。 1. メッセージを送信しているスレッドとは別のスレッドで、ファイルにデータを書き込む作業を処理します。2. 追加のオブジェクトを割り当てません (したがって、GC のために一時停止する可能性はありません)。新しいメモリの割り当ては望ましくないため、Write() メソッドは、書き込み用のメッセージを受け入れるのに十分なスペースができるまでブロックできます。

ここで CircularBuffer/CircularStream のようなものを使用することを検討しています: http://circularbuffer.codeplex.com/ (ただし、バッファがいっぱいの場合、この実装はブロックされません)

あなたの考えは何ですか?

0 投票する
1 に答える
228 参照

c - リングバッファのポーリング効果を軽減するための戦略

1Readerスレッド/1Writerスレッド設定で標準リングバッファの実装を使用しています。

リーダーはバッファーが空のときにループし[ライターはバッファーがいっぱいになるとループします]、制御変数を継続的にポーリングするため、pthread_yield(私の場合はsched_yieldのラッパーのみ)を呼び出して、システム内の他のスレッドを優先します。正しく機能するために必要ではないため、ミューテックスは使用していません。

ポーリングの影響(別名CPU書き込み)を軽減するためのより良い方法はありますか?私はpthreadの条件変数について考えていましたが、データがない[スペースがない]場合はほとんどスレッドをブロックするためですが、オーバーヘッドが発生する可能性があるのではないかと心配しています。

ありがとう

0 投票する
1 に答える
444 参照

c - スレッド化されたバッファ: クライアント間の競合を防ぎ、クライアントとサーバーがバッファで同時に動作するようにする方法

私は、循環バッファーに情報を格納できるいくつかのスレッド化されたクライアントを持つプログラムを作成しました。サーバーは、循環バッファーからメッセージを読み取る (および「削除する」) ことができます。私が抱えている問題は、バッファがいっぱいになったときです。現在バッファに書き込んでいるクライアントはミューテックスを解放する必要があります (バッファからすべてのデータを削除するサーバー) が、ミューテックスを解放するときにクライアントが競合し、既にビジー状態だったクライアントが最初に送信を続行するとは限りません。だから彼のメッセージは混乱します。これを解決する方法を知っている人はいますか?または、これを行うためのより良い方法について提案がありますか。最終的には、メッセージがバッファに保存され、サーバーによってすべてのクライアントに再送信されるマルチスレッド tcp サーバーを作成したいので、何に使用するかがわかります。

0 投票する
1 に答える
814 参照

c - バッファーがプロデューサーからの入力よりも小さい場合、プロデューサー/コンシューマーはデッドロック状態にあるようです

複数のクライアントがバッファに書き込む(最終的には異なるサイズのメッセージを書き込む)循環バッファを作成しました。サーバーはそれらを読み取ります。これは、消費者/生産者の問題のコードに基づいています。

バッファが単一のクライアントのメッセージよりも大きい場合 (buffer_sizeたとえば 16 など大きくすることによって)、ほとんどの場合機能します。しかし、小さくすると行き詰まるようで、いろいろ調べても原因がわかりません。デバッガーでコードを実行すると、コードが停止しているように見えます。

ここでコードが停止するのはなぜですか? また、停止しないようにするにはどうすればよいですか?