4

Linux のmount(2)機能をシングル スレッド プロセスで使用します。ただし、CD-ROM などのデバイス デバイスのマウントにはしばらく時間がかかる場合があります (私が見た最悪の場合は 40 秒です!)。少し熟考し、ディスクをスピンアップしてから、ファイルシステムをマウントします。これにより、プロセスが他のイベントを処理するのをかなりの時間ブロックする可能性があります。

ファイルシステムをブロックしない方法でマウントする方法が見つからないようです。マルチスレッドやフォークなしでファイルシステムを非同期的にマウントする方法はありますか?

同じスレッドでカーネル uevents を既に読んでいるので、アクションが完了したかどうかを知ることは私にとって問題ではありません。

4

3 に答える 3

13

いいえ。別のスレッドやing を起動せずに、戻るfork()のを待つ必要があります。mount()

于 2009-01-28T02:34:26.890 に答える
2

マウント プロセスをバックグラウンドで実行できます。次のようなものを実行する代わりに:

system("mount -a ");

行う

system("mount -a &");

これにより、マウントがバックグラウンドで完了します。

しかし、もう少し詳しく見てみると、このソリューションは C インターフェイスではなく、システム インターフェイスを使用しています。

于 2009-01-28T08:23:06.313 に答える
2

シングル スレッド方式で実行する場合は、マウント コマンドを手動で実行してバックグラウンドで実行し、select() などを使用して完了をポーリングできます。ただし、これはハックであり、プログラム内で fork して mount() を呼び出すことと大差ありません。

また、mount() がプロセス全体 (および関連するスレッド) をブロックした経験があることも注目に値します。そのため、真の非同期動作を実現するには、フォークがおそらく最適な方法です。

于 2009-01-28T02:50:10.947 に答える