幾個月前,我遇到了一個人(orkut)提出的這個有趣的場景。儘管如此,我已經想出了一個針對這個問題的「非便攜式」解決方案(已經用小代碼對其進行了測試),但仍然想知道你們有什麼要說的和建議的。場景:多線程應用程序使用的DLL中的全局變量
假設我創建了一個DLL,導出一些用C++編寫的功能,用於單線程客戶端。這個DLL聲明瞭大量的全局變量,其中一些可能是const變量(只讀),而另一些是可以修改的。無論如何,後來的事情發生了變化,現在我想讓相同的DLL與多線程應用程序(不需要修改DLL)一起工作。這意味着,幾個線程從DLL訪問函數和全局變量,並修改它們......等等。所有這些都可能導致全局變量保持不一致的值。
所以現在的問題是,
我們可以做一些客戶端代碼,以防止DLL的多接入,並在同一時間,確保每個線程在它自己的上下文(意運行,當它訪問DLL時,DLL的全局值與以前相同)?
如果您至少可以重建DLL,您可以將__declspec(threadlocal)添加到所有全局定義中。我強烈懷疑在構造函數或析構函數的靜態範圍類對象上會失敗。 – 2010-11-30 12:30:58
Chris ...不,我們不能將__declspec(threadlocal)添加到全局變量,因爲不允許修改源代碼。 :-) – Nawaz 2010-11-30 14:05:15