KKKM2019/09/16 10:32ご回答ありがとうございます。 >>問題が起きることが多いです 問題が起きないのはどういったケースでしょうか? 他に何か要因は考えられないでしょうか もしアドバイスございましたらよろしくお願いいたします
yominet2019/09/16 11:56他に要因を聞こうとしていますが・・・ あなたのプログラムで発生してる問題に対し、 Chironianさんの回答以外の「問題の要因である可能性の情報」やアドバイスを欲しいのであれば あなたのプログラム固有の情報をもっと書いたほうがいいと思います。
Chironian2019/09/16 12:01書き込んでいる最中の中途半端なデータを読み出しても矛盾が発生しないなら問題は起きません。 例えば、要素数と、要素の並びに連続的に書き込んでいたとします。 各要素の間に関連はなく完全に独立しているものと仮定します。 また要素の並びは決まったアドレスを使っていると仮定します。(realloc等で再獲得しないという意味) そして、要素数を増やす時は要素の並びの最後に1つ追加してから、要素数を増やす。 要素数を減らす時は必ず要素の並びの最後から1つ減らす。 これなら恐らく矛盾は発生しません。(とはいえ、深い検証はしていませんので、何か検討漏れがあるかもしれないです。漏れがあると矛盾は発生します。)
majiponi2019/09/16 14:46減らすとき、要素数をデクリメントするときにロード→デクリメント→ストアをアトミックにやらないと、他のスレッドがストア前に要素数を参照したときに有効でない要素にアクセスしてしまうのでは?
asm2019/09/17 00:31 編集32bitのCPUで64bit変数を操作した時などに起きうるのですが 変数の読み書きがそもそもアトミックじゃない事もありえます。 (011... → 100... への書き換え中に111...や000...が読み取れるタイミングがある感じ)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/16 10:32
2019/09/16 11:56
2019/09/16 12:01
2019/09/16 14:46
2019/09/16 14:52
2019/09/17 00:31 編集
2019/09/17 01:42