2016-07-10 34 views
0

我正在編寫一個應用程序,要求某個給定用戶的某些活動不被可能競爭的線程踩踏。我的整個用戶數據庫都在內存中,我正在考慮在用戶數據結構中添加一個pthread_rwlock_t。我預計不會超過10到20萬用戶。在鎖定結構的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。有服務員或服務員時,futex是否真的不需要任何資源?應該將維護者保存在內核中的某個列表或其他數據結構中。 – osgx

+1

@osgx:這不是每個鎖的資源,這是每個服務器的資源。 – caf

+0

謝謝。對於這個特定的應用程序,我幾乎肯定不需要除現代Linux之外的其他任何東西,但是知道至少需要可能會耗盡資源的_potential_有用。如果需要將代碼移植到其他地方,我可以在代碼中插入大量的評論。 – Kean

相關問題