この質問は、制限付きの技術的な使用法ではなく、主観的な使用法に関するものです。技術的に制限がどのように機能するかについては誤解されているかもしれませんが、その場合は、誤った前提に基づいて質問をするために私をグリルしてください。
これまでのところ、restrictedを使用している2つの例を次に示します。
不変の文字のシーケンスへのポインターを受け取る関数がある場合、他の人が関数の実行と同時に、たとえば別の並列から、自分のポインターを介してデータにアクセスできるため、制限されているとは言えません。スレッド。データは変更されていないので、問題ありません。
ただし、関数が変更する可能性のある一連の可変文字へのポインターを取得する場合、潜在的に一貫性のないデータによる関数。また、データが変更される可能性も記載されているため、コーダーは古いデータを読み取らないこと、およびアクセスするときなどにメモリバリアを使用する必要があることを認識しています...
私はあまりCをコーディングしていないので、ここで想定していることについて簡単に間違っている可能性があります。これはrestrictの正しい使用法ですか?このシナリオで行う価値はありますか?
また、関数が戻ったときに制限付きポインターがスタックからポップされると、他のポインターを介してデータに自由にアクセスできるようになり、制限は制限付きポインターの間だけ続くと想定しています。「非公式」ポインターを介して制限されたデータにアクセスするのはUBであるため、これはルールに従ったコーダーに依存していることを私は知っています。
私はこれをすべて正しく理解しましたか?
編集:
ユーザーが複数のスレッドを介してデータにアクセスするのを妨げることはまったくないことをすでに知っていることを明確にしておきたいと思います。また、C89には「スレッド」が何であるかさえ知らないことも知っています。
ただし、参照を介して引数を変更できるコンテキストを考えると、関数の実行中に引数にアクセスしてはならないことは明らかです。これはスレッドセーフを強制するために何もしませんが、あなた自身のリスクで関数の実行中にあなた自身のポインタを介してデータを変更することを明確に文書化します。
スレッド化が完全に方程式から外されたとしても、それが私にとって正しいと思われるシナリオでは、さらに最適化することができます。
それでも、これまでのすべての信頼できる回答に感謝します。気に入ったすべての回答に賛成しますか、それとも受け入れた回答だけに賛成しますか?複数が受け入れられた場合はどうなりますか?申し訳ありませんが、私はここで新しいです、私は今FAQをより徹底的に調べます...