boostリファレンスの英文訳(?)の問題です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
SUE
記事: 41
登録日時: 7年前

boostリファレンスの英文訳(?)の問題です

#1

投稿記事 by SUE » 6年前

久しぶりにお世話になります。

僕は今boost::lockfre::queueを使おうと思っています。そのメンバのempty()についてなのですが、
公式リファレンスには、
"The result is only accurate, if no other thread modifies the queue. Therefore it is rarely practical to use this value in program logic. "
とのメモがありました。これを
「他のどのスレッドもキューに変更を加えていなければ、返り値は正確である。それゆえに、この値をプログラムの論理で使うことはほとんど実用的ではない。」
と訳したのですが、これだとキューが空かどうかを調べる方法がありません(size()も存在しません)。pop()は空かどうかを返しますがpop()してしまうので…

 この訳が誤訳なのでしょうか、それともそのような仕様なのでしょうか。ご教示お願いします。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】


ISLe
記事: 2645
登録日時: 9年前
連絡を取る:

Re: boostリファレンスの英文訳(?)の問題です

#3

投稿記事 by ISLe » 6年前

仕様に照らすと
「返り値が唯一正確であるのは、他のどのスレッドもキューに変更を加えていない場合である。ゆえに、この値をプログラムのロジックに使うことはあまり現実的ではない。」
ということですかね。
要するに「この値はほとんど役に立たないよ」ということですよね。

アバター
SUE
記事: 41
登録日時: 7年前

Re: boostリファレンスの英文訳(?)の問題です

#4

投稿記事 by SUE » 6年前

お二人ともありがとうございました。

これは結局mutexなりを使う部分が出てきそうですね・・・。一応lockfree queueのメリットは残るので使い続けますが。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

beatle
記事: 1280
登録日時: 8年前
住所: 埼玉
連絡を取る:

Re: boostリファレンスの英文訳(?)の問題です

#5

投稿記事 by beatle » 6年前

わざわざロックフリーなキューを使うのに、mutexも併用するんですか?
なんだか可笑しな話ですね。

ロックフリーキューの使い方として、消費する側は
「popしてみて成功したら仕事をするし、失敗したら再度popに挑戦する」
みたいな動きをするのが良いのだと思いますが、SUEさんのプログラムではそういう設計にはなってませんか?

マルチスレッドにおいて、「現時点でキューは空か」と質問するのは、実はあまり意味が無いことです。
「現時点」というのはキューの要素数を表す変数から値を読み込む機械語の実行時点ですが、
もしかしたらその機械語を実行した直後に、他スレッドがキューに値を追加するかもしれないのです。

だから、「キューが空ではないなら、キューから値を取り出して何かする」というのは、
キューが空かを確認する時点と、キューから値を取り出す間に時間差があります。
だから、ロックフリーキューのpopは、「取り出してみて、空だったらfalseを返す」仕様なわけです。

アバター
SUE
記事: 41
登録日時: 7年前

Re: boostリファレンスの英文訳(?)の問題です

#6

投稿記事 by SUE » 6年前

beatleさんありがとうございます。

実はまったく仰る通りで・・・上の返信をした後いろいろ試行錯誤してみたのですが、mutexとロックフリーキューを併用すると
考えると、どうしてもおかしな点があり行き詰まっていました。なるほど、理屈で言うとそういうことだったのですね。

中途半端は諦めて、mutexを使った実装に戻して出直して来たいと思います。上では解決チェックを入れ忘れていましたが、今度は付けます。ありがとうございました。
pop'n music 20 fantasia ポップンクエストPhase MAX Ⅱ ムラクモ/少年は空を辿る【Power Of Nature】

閉鎖

“C言語何でも質問掲示板” へ戻る