`
sakakokiya
  • 浏览: 488720 次
  • 性别: 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;
}
分享到:
评论

相关推荐

    经典嵌入式笔试题

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

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

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

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

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

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

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

    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

    c#多线程抓取网页内容

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

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

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

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

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

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

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

    实现线程同步的几种方式 - Small_Lee的博客 - CSDN博客.html

    java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(如数据的增删改查), 将会导致数据不准确,相互之间产生冲突,因此加入同步锁以避免在该线程没有完成操作之前,被其他线程的调用, 从而保证...

    linux系统编程之线程.zip

    【练习】:循环创建多个线程,每个线程打印自己是第几个被创建的线程。(类似于进程循环创建子进程) 【more_pthrd.c】 拓展思考:将pthread_create函数参4修改为(void *)&i, 将线程主函数内改...

    Python线程条件变量Condition原理解析

    当几个条件变量共享一个锁时,你就应该自己传入一个锁。这个锁不需要你操心,Condition 类会管理它。 acquire() 和 release() 可以操控这个相关联的锁。其他的方法都必须在这个锁被锁上的情况下使用。wait() 会释放...

    深入分析C# 线程同步

    上一篇介绍了如何开启线程,线程间相互传递参数,及线程中本地变量和全局共享变量区别。 本篇主要说明线程同步。 如果有多个线程同时访问共享数据的时候,就必须要用线程同步,防止共享数据被破坏。如果多个线程不会...

    Linux多线程同步方式

    而操作系统对于多线程不会自动帮我们串行化,所以需要我们通过操作系统提供的同步方式api,结合自己的业务逻辑,利用多线程提高性能的同时,保证业务逻辑的正确性。一般而言,linux下同步方式主要有4种,原子锁,...

    net学习笔记及其他代码应用

    创建了几个String Object? 答:两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。 38.abstract class和interface有什么区别? 答: 声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于...

Global site tag (gtag.js) - Google Analytics