メモリ位置への読み取りが無期限に長くなる可能性はありますか(および任意のタイムアウト後に読み取りを完了できる別のスレッド)最後に無期限にファイルにマップされたメモリにアクセスすることができます
例えば、ソケットをブロックして、我々はread
システムコールを使用する際に停止させるプロセスを取得することができますが:
fd = socket(AF_UNIX, SOCK_DGRAM, 0);
read(fd, buffer, 256);
通常、我々はmmap
ソケットことはできませんが、私は基本的に起こるために同じことをしたいと思います直接メモリにアクセスするとき:
int x = *(int *)map;
を私は、メモリアクセスを行うための技術を知っていますそれにアクセスする前のページにメモリをmadvise
を使用してのように、時間がかかるが、私は最後にこれを取得する方法を探しています無期限に。
私はファイル上でmmap
を使用し、そのファイルを「ロック」していると考えましたが、そのための適切なインターフェイスが見つかりませんでした。 flock
システムコールはこのようには動作しません。
具体的には、私はFreeBSD for x86-64アーキテクチャに興味がありますが、Linuxや他のアーキテクチャなどの他のUnixライクなシステムに対する回答も高く評価されます。
メモリアクセスをブロックする場合は、NFSマウントでファイルをmmap()し、このメモリ上で実際のランダムアクセスを実行できます。 – wildplasser
ファイルがカスタム['FUSE'マウント](https://en.wikipedia.org/wiki/Filesystem_in_Userspace)にある場合は、任意の動作を取得できます。 –