关于《windows via c&C++》中线程的疑问,感觉作者写的有有关问题
关于《windows via c&C++》中线程的疑问,感觉作者写的有问题。
Another problem with the polling method used in the previous code fragment is that the BOOL variable
g_fFinishedCalculation might never be set to TRUE. This can happen if the primary thread has a higher priority than the thread executing the RecalcFunc function. In this case, the system never assigns any time slices to the RecalcFunc thread, which never executes the statement that sets g_fFinishedCalculation to TRUE.
作者说可能RecalcFunc得不到执行,我感觉不会啊。这个线程如果starve的话,系统会自动提高它的优先级啊。
------解决方案--------------------
只是提出一种假设。
windows下饥饿的确会引起线程优先级的动态提升。但是这种提升再怎么生也只是15以下,万一主线程优先级在16以上呢
- C/C++ code
volatile BOOL g_fFinishedCalculation = FALSE; int WINAPI _tWinMain(...) { CreateThread(..., RecalcFunc, ...); ... // Wait for the recalculation to complete. while (!g_fFinishedCalculation) ; ... } DWORD WINAPI RecalcFunc(PVOID pvParam) { // Perform the recalculation. ... g_fFinishedCalculation = TRUE; return(0); }
Another problem with the polling method used in the previous code fragment is that the BOOL variable
g_fFinishedCalculation might never be set to TRUE. This can happen if the primary thread has a higher priority than the thread executing the RecalcFunc function. In this case, the system never assigns any time slices to the RecalcFunc thread, which never executes the statement that sets g_fFinishedCalculation to TRUE.
作者说可能RecalcFunc得不到执行,我感觉不会啊。这个线程如果starve的话,系统会自动提高它的优先级啊。
------解决方案--------------------
只是提出一种假设。
windows下饥饿的确会引起线程优先级的动态提升。但是这种提升再怎么生也只是15以下,万一主线程优先级在16以上呢