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

多线程应用中被几个任务共享的变量

阅读更多
回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS等等打交道,所用这些都要求volatile变量。不懂得volatile内容将会带来灾难。
假设被面试者正确地回答了这是问题(嗯,怀疑这否会是这样),我将稍微深究一下,看一下这家伙是不是直正懂得volatile完全的重要性。
1). 一个参数既可以是const还可以是volatile吗?解释为什么。
2). 一个指针可以是volatile 吗?解释为什么。
3). 下面的函数有什么错误:
int square(volatile int *ptr)
{ return *ptr * *ptr;
} 下面是答案:
1). 是的。一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。
2). 是的。尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。
3). 这段代码的有个恶作剧。这段代码的目的是用来返指针*ptr指向值的平方,但是,由于*ptr指向一个volatile型参数,编译器将产生类似下面的代码:
int square(volatile int *ptr)
{ int a,b;
a = *ptr;
b = *ptr;
return a * b;
} 由于*ptr的值可能被意想不到地该变,因此a和b可能是不同的。结果,这段代码可能返不是你所期望的平方值!正确的代码如下:
long square(volatile int *ptr)
{ int a;
a = *ptr;
return a * a;
}
分享到:
评论

相关推荐

    实验二.多线程应用程序设计

    多线程应用程序设计是指在一个进程中运行多个线程,每个线程共享进程的资源,包括打开的文件、页表、信号标识及动态分配的内存等等。线程技术可以让程序更快、更高效、更方便地处理多任务操作。 1. 多线程概述 多...

    经典嵌入式笔试题

    经典嵌入式笔试题 8. 关键字volatile有什么含意?并给出三个不同的例子。 一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了...3) 多线程应用中被几个任务共享的变量

    Linux下基于多线程的服务器程序设计.pdf

    最后,多线程可以并发地执行任务,提高服务器的并发能力。 在设计多线程服务器程序时,需要考虑线程的特点和属性。线程有助于解析这些问题,线程有时称为轻进程。线程的优点是可以快速地响应客户请求,提高服务器的...

    最强版VB程序间共享内存,进程通信-共享变量,支持结构

    程序间共享内存,用于数据交换,非常强大的示例,解决你进程间数据共享的问题 不错,解决了传输问题,可以共享N个字符串。整数等类型 改造一下,进程通讯就可以用...要是能在共享里面加上多线程就好了(可以加互斥体)

    Delphi多线程编程之三 同步读写全局数据

    注意除WaitForSingleObject()函数外,你还可以使用WaitForMultipleObject()和MsgWaitForMultipleObject()函数,它们可以等待几个对象变为发信号状态。这两个函数的详细情况请看Win32 API联机文档。 4、在同步...

    生产者-消费者的Linux多线程实现.pdf

    4. 改善程序结构:一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,便于理解和修改。 生产者-消费者问题实现 生产者-消费者问题是在有界缓冲上操作的,它利用 N 个字节的共享内存作为...

    2020面试题总结多线程篇.pdf

    可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。如果一个字段被声明为 volatile,Java 线程内存模型确保所有线程看到这个变量的值是一致的。 volatile 具有几条特性: * volatile ...

    使用redis分布式锁解决并发线程资源共享问题

    众所周知, 在多线程中,因为共享全局变量,会导致资源修改结果不一致,所以需要加锁来解决这个问题,保证同一时间只有一个线程对资源进行操作 但是在分布式架构中,我们的服务可能会有n个实例,但线程锁只对同一个...

    c#多线程抓取网页内容

    知道开启多线程下载的方法后,大家可能会产生几个疑问: 1. 如何控制线程的数量? 2. 如何防止多线程下载同一网页? 3. 如何判断线程结束? 4. 如何控制线程结束? 下面就这几个问题提出解决方法: 1. 线程数量...

    ado连接池实例

    在一个多线程的应用程序中创建一个TThread的后子类代表一个线程。每一新子类的TThread对象的实例是一个新的线程。从TThread派生的多线程实例可以构成Delphi的多线程应用程序。  当一个应用程序运行时,应用程序就...

    针对于Executor框架,Java API,线程共享数据

    Executor框架是Java并发编程中的一个重要工具,它提供了一种管理...原子操作在并发编程中具有重要的作用,可以保证多个线程对同一个变量的操作是线程安全的。 在两个线程之间共享数据,可以通过以下几种方式实现:

    JAVA 多线程

    线程也可以达到同一份程序产生好几个进程的效果,但是不同的线程之间可以有某种程度上的资源共享,所以线程又被称为轻量级进程(lightweight process)。  Threads run at the same time, independently of one ...

    hdld快速多线程批量下载机器人

    多线程,断点续传等功能更加把文件下载的传统功能进一步升华。 列表文件,使得对文件的下载管理更直接,更方便。 从网页搜取下载连接,从文件获得下载链接并启动下载,这些都是方便用户使用的措施。往往几条...

    C#线程锁介绍源码

    只有可以被多线程访问的共享资源才需要考虑锁定,比如静态变量,再比如某些缓存中的值,而属于线程内部的变量不需要锁定。 2)多使用lock,少用Mutex 如果你一定要使用锁定,请尽量不要使用内核模块的锁定机制,...

    单片机与DSP中的单片机中volatile定义的作用

    一个定义为volatile的变量是说这变量... 多线程应用中被几个任务共享的变量  回答不出这个问题的人是不会被雇佣的。我认为这是区分C程序员和嵌入式系统程序员的最基本的问题。嵌入式系统程序员经常同硬件、中断、RTOS

    VB6指针修改数组,多种方法变量赋值速度对比

    相关技术:如果有个共享变量a(100) as long,可以把数组的指针取出来,然后传到类中,再用 指针.value(0)这样读写,速度会慢一倍,还能接受。 不知道有什么办法修改变量的指针 【活跃】大唐 13:22:05 vb还没有...

    Multithreaded Programming in CVI

    在多线程编程中,保护共享数据是非常重要的。假设有两个线程要访问同一个变量count,以下是可能出现的错误场景: * Thread 1:获取变量count的值(5) * Thread 2:获取变量count的值(5) * Thread 2:将值加1(5+...

    用多线程同步方法解决生产者-消费者问题(操作系统课设

    生产者-消费者问题是操作系统中经典的问题之一,它是指在多线程环境下,多个生产者线程和消费者线程访问同一个共享缓冲区,导致缓冲区的数据混乱和不一致的问题。 在解决生产者-消费者问题时,需要使用同步机制来...

    Java并发面试题整理(答案)

    可见性指多个线程操作一个共享变量时,其中一个线程对变量进行修改后,其他线程可以立即看到修改的结果。 (3)有序性 有序性,即程序的执行顺序按照代码的先后顺序来执行。 2、实现可见性的方法有哪些? ...

    JAVA实现Modbus RTU或Modbus TCPIP数据采集.rar

    5.将复合操作放在一个原子操作中执行,或用相同的锁来保护每个共享的和可变的变量。 6.增加同步必然会导致代码的复杂性,为性能牺牲代码简单性时不要太盲目,因为越复杂的代码,其不安全性越大。

Global site tag (gtag.js) - Google Analytics