我正在查找关键字volatile以及它的用途,我得到的答案非常多:
它用于防止编译器优化代码.
有一些示例,例如轮询内存映射硬件时:没有volatile轮询循环将被删除,因为编译器可能会识别出条件值永远不会更改.但由于只有一个例子或两个例子,它让我思考:volatile在避免不必要的优化方面我们还需要使用其他情况吗?条件变量是唯一volatile需要的地方吗?
我认为优化是特定于编译器的,因此未在C++规范中指定.这是否意味着我们必须通过直觉,说嗯,我怀疑如果我没有声明该变量volatile或者是否有任何明确的规则,我的编译器将废除它?
我用C++编写了一个Windows程序,它有时使用两个线程:一个后台线程用于执行耗时的工作; 和另一个用于管理图形界面的线程.这样,程序仍然响应用户,这需要能够中止某个操作.线程通过共享bool变量进行通信,该变量设置为true当GUI线程通知工作线程中止时.这是实现此行为的代码(我已经删除了不相关的部分):
class ProgressBarDialog : protected Dialog {
/**
* This points to the variable which the worker thread reads to check if it
* should abort or not.
*/
bool volatile* threadParameterAbort_;
...
BOOL CALLBACK ProgressBarDialog::DialogProc( HWND dialog, UINT message,
WPARAM wParam, LPARAM lParam ) {
switch( message ) {
case WM_COMMAND :
switch ( LOWORD( wParam ) ) {
...
case IDCANCEL :
case IDC_BUTTON_CANCEL :
switch ( progressMode_ ) {
if ( …Run Code Online (Sandbox Code Playgroud)