`
hanyh
  • 浏览: 235341 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

volatile busy wating

阅读更多
consequently C++, the keyword was intended to:[citation needed]

    * allow access to memory mapped devices
    * allow uses of variables between setjmp and longjmp
    * allow uses of variables in signal handler

易挥发的,避免优化
===>busy waiting (or spinning)
is a technique in which a process repeatedly checks to see if a condition is true.such as waiting for keyboard input or waiting for a lock to become available.
It's considered an anti-pattern.
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>

//volatile int i = 0;
int i = 0;

static void *
f1 (void *p)
{
  while (i == 0)
    {
      ;
    }
  printf ("i's value has changed to %d\n", i);
  return NULL;
}

static void *
f2 (void *p)
{
  sleep (2);
  i = 99;
  printf ("t2 has changed value\n");
  return NULL;
}

int
main ()
{
  int rc;
  pthread_t t1, t2;
  rc = pthread_create (&t1, NULL, f1, NULL);
  if (rc != 0)
    {
      fprintf (stderr, "pthread f1 failed\n");
      return EXIT_FAILURE;
    }

  rc = pthread_create (&t2, NULL, f2, NULL);
  if (rc != 0)
    {
      fprintf (stderr, "pthread f2 failed\n");
      return EXIT_FAILURE;
    }

  pthread_join (t1, NULL);
  pthread_join (t2, NULL);
  puts ("all pthreads finished.");
  return 0;
}

gcc -o busy_wati busy_wati.c -lpthread -O3[b][/b]

1,加了O3优化才会变成while(true)


替换busy_waiting的方法:
signals,
lock acquisitios,timers,I/O avail....

适合地点:在一些硬件设备上,设备驱动上(来回切换的代价比较高)
分享到:
评论

相关推荐

    Volatile详解,深入学习Volatile

    《深入理解Volatile》 Volatile是C/C++编程语言中的一个关键字,它与const一起被称为"cv特性",用于指示变量的值可能被系统或其他线程/进程改变,从而强制编译器每次从内存中读取该变量的最新值。在多线程或嵌入式...

    volatile的用法讲解

    "volatile的用法讲解" volatile是一种特殊的变量修饰符,它告诉编译器,这个变量的值可能会被意外地改变,因此编译器不能对其进行优化,以确保每次读取该变量时都能获取最新的值。下面是volatile变量的使用场景: ...

    volatile源码分析1

    【volatile源码分析1】 Java中的volatile关键字是一个关键的同步机制,它在多线程编程中扮演着重要的角色。在面试和技术讨论中,volatile经常成为焦点,但其工作原理却常常引发争议。本文将从JVM、C++以及汇编语言...

    volatile的使用方法

    volatile 关键字在 C 语言中的使用方法 在 C 语言中,volatile 关键字是用来指定变量的存储类别的,它告诉编译器这个变量的值可能会在编译器不知道的情况下被修改,因此需要重新加载这个变量的值。volatile 关键字...

    const和volatile分析

    在C++编程语言中,`const`和`volatile`是两个非常重要的关键字,它们用于修饰变量,赋予变量特殊的属性。这两个关键字在理解程序的行为、内存模型以及多线程编程中起到至关重要的作用。在此,我们将深入探讨`const`...

    volatile用法

    `volatile`关键字在C语言中是一个非常重要的概念,主要用于处理多线程环境或者与硬件交互时的内存可见性问题。它的主要作用是确保对变量的修改能够立即反映到所有线程,防止编译器进行不必要的优化,使得其他线程...

    Java线程:volatile关键字

    Java 线程 volatile 关键字详解 Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。volatile 变量的同步性较差,但它有时更简单并且开销更低。volatile 变量可以被看作是一种 “程度较轻的 ...

    stm32 volatile变量的正确使用

    ### STM32中Volatile变量的正确使用 #### 概述 在嵌入式系统编程中,`volatile`关键字的正确使用对于确保程序的稳定性和可靠性至关重要。它主要用于标记那些可能在程序运行过程中被外部因素(如硬件中断、多线程...

    volatile详解

    ### volatile详解 #### 一、volatile的基本概念与作用 `volatile`关键字在编程语言中扮演着重要的角色,尤其是在处理并发编程、嵌入式系统开发等领域。`volatile`的中文含义通常被翻译为“易变的”,但根据描述中...

    单片机C语言中volatile的作用

    ### 单片机C语言中volatile的作用 在探讨单片机C语言中`volatile`关键字的作用之前,我们首先需要理解`volatile`的基本概念及其应用场景。`volatile`是一个用于声明变量的关键字,在C语言中,使用`volatile`修饰的...

    单片机中volatile定义的作用

    单片机中volatile定义的作用 单片机中volatile定义的作用是指在单片机编程中,使用volatile关键字来定义变量,使编译器认为该变量可能会被意外地改变,从而避免编译器对该变量的优化。这样,编译器将每次都重新读取...

    volatile的用法

    Volatile是C语言中的一个类型修饰符,用于告诉编译器该变量可能会在程序的控制之外被改变,从而禁止编译器对涉及该变量的代码做优化处理。这种用法在多线程、中断服务程序和硬件访问等场合特别重要。接下来详细说明...

    java volatile 关键字实战

    java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java volatile 关键字实战java ...

    volatile 变量的说明

    volatile变量在编程语言中,尤其是Java和C/C++中,是一种特殊的标识符,用于指示编译器该变量的值可能在编译器不知情的情况下发生变化。这个关键字的主要作用是告诉编译器不要对这个变量进行优化,每次使用时都需要...

    C中volatile_const解析

    ### C中`volatile`与`const`解析 #### 概述 在C语言中,`volatile`和`const`是两个非常重要的关键字,它们在不同的场景下有着独特的用途。掌握这两个关键字不仅能够帮助开发者写出更加高效和可靠的代码,还能够在...

    volatile使用详解

    ### Volatile 关键字详解 #### 一、Volatile 的定义与作用 `volatile` 是一种类型修饰符,用于声明的变量表示这类变量可能会被某些因素(如操作系统、硬件或其他线程)更改,这些更改是编译器所不知道的。在程序...

    volatile变量

    ### volatile变量详解 #### 一、volatile的基本概念与作用 `volatile`是一个在编程语言中常用的关键词,尤其是在C/C++中。它用于定义一个变量,表明该变量可能会被意想不到的方式改变,这种改变可能是由硬件、中断...

    volatile_unsigned_int

    标题“volatile_unsigned_int”以及描述“讲述了volatile_unsigned_int地址映射的使用说明”指向了C语言中特殊的关键词“volatile”以及其与“unsigned int”类型的结合使用。该知识点主要涉及硬件编程,特别是在...

    C#中volatile与lock用法

    本文实例讲述了C#中volatile与lock用法,分享给大家供大家参考。具体分析如下: 一、C#中volatile volatile是C#中用于控制同步的关键字,其意义是针对程序中一些敏感数据,不允许多线程同时访问,保证数据在任何访问...

Global site tag (gtag.js) - Google Analytics