2016-07-10 6 views
0

私は、特定のユーザーの特定のアクティビティが競合する可能性のあるスレッドによって踏み込まれていないことを要求するアプリケーションを作成しています。私のユーザデータベース全体がメモリにあり、私はpthread_rwlock_tをユーザデータ構造に追加することを考えていました。私は約10〜20,000人を超えるユーザーを予想していません。ロック構造のための56バイトで、それはまったくたくさんのRAMではありません。私の質問は、あなたがプロセスで持つことができる実際のrwlockの数には実際的な制限があるということですか?私はロックを得ることができるスレッドの数、または与えられたスレッドがロックカウンタをインクリメントできる回数について話していません。むしろ、根本的なカーネルや他のリソースがあれば、個々のロックを後退させてしまい、枯渇するかもしれません。pthreads rwlocksの実際の制限はありますか?

答えて

2

これは実装品質の問題です。POSIXでは、リソースの消耗によりrwlockの初期化が失敗することがあります。しかし、一般的なLinuxの実装では、例えば、pthread_rwlock_t自体のメモリ以外にロック単位のリソースは必要ありません。

+0

"一般的なLinuxの実装では、pthread_rwlock_t自体のメモリ以外のロック単位のリソースは必要ありません。彼らは? pthread_rwlock_tを格納するためのメモリは必要ありません。 rwlockメソッド(例えば、http://osxr.org:8080/glibc/source/nptl/pthread_rwlock_rdlock.c#0030)にfutex syscallを持つlll_futex_waitがあります。ウェイターやウェイターがいるときにフューテックスが資源を必要としないのは本当ですか?ウェイターは、いくつかのリストや他のデータ構造でカーネルに保存する必要があります。 – osgx

+1

@osgx:それはロックごとのリソースではなく、ウェイターごとのリソースです。 – caf

+0

ありがとうございます。この特定のアプリケーションでは、現代のLinux以外のものはほとんど必要ありませんが、リソースが枯渇する可能性があるということを少なくとも知っておくと便利です。他の場所に移植する必要がある場合は、コードにその旨のコメントをたくさん挿入することができます。 – Kean

関連する問題