`
sakakokiya
  • 浏览: 506958 次
  • 性别: 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. **全局变量**:全局变量在整个程序范围内可见,包括所有线程。当一个线程修改全局变量时,其他线程也可以立即看到这个变化。然而,由于多线程可能导致并发...

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

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

    CVI 线程锁、线程安全变量实例

    在LabWindows/CVI的`多线程_线程锁_线程安全变量`示例中,你可能会发现以下几个关键点: 1. **线程创建与销毁**:使用`cvCreateThread()` 创建线程,并通过`cvExitThread()` 结束线程。 2. **线程锁的使用**:在...

    多线程之条件变量

    在多线程编程中,条件变量(Condition Variables)是一种重要的同步机制,用于线程间的通信和协调。条件变量允许线程在满足特定条件时挂起执行,等待其他线程改变状态,然后再唤醒继续执行。这种方式使得线程可以...

    多线程的运用e语言多线程 e多线程

    在E语言中,多线程能够帮助开发者在处理大量I/O操作、复杂的计算任务或者需要实时交互的应用场景时,提高程序的效率。通过创建多个线程,每个线程可以独立执行一段代码,而不影响其他线程的运行。 二、E语言中的...

    线程间通信的定义及全局变量的方法

    在多任务操作系统中,多线程和多进程是实现并发执行的基本单位。它们可以让计算机同时执行多个任务,从而提高程序的响应速度和运行效率。然而,当多个线程或进程同时工作时,就不可避免地会涉及到线程间或进程间通信...

    易语言多线程版中控

    易语言的多线程支持通常包括以下几个关键知识点: 1. **线程创建**:在易语言中,可以使用特定的函数或命令来创建新的线程。这些新线程可以执行自定义的代码段,与主线程并行运行。 2. **线程同步**:在多线程环境...

    delphi多线程传递参数及同步二

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在 Delphi 这样的面向对象的编程环境中。本文将深入探讨如何在 Delphi 中创建多线程,并且着重讲解如何传递参数给线程以及如何在主线程中同步显示由线程处理...

    通过ActiveXExe文件建立多线程程序

    在IT行业中,多线程是一种常见的编程技术,它允许应用程序同时执行多个独立的任务,从而提高程序的效率和响应性。ActiveX EXE 文件是Microsoft Visual Basic(VB)中的一种特殊类型的应用程序,它可以作为服务器运行...

    易语言多线程参数应用源码

    在易语言中,创建多线程通常涉及以下几个步骤: 1. 定义线程函数:线程函数是多线程程序的核心,它定义了线程执行的具体任务。在易语言中,我们需要使用“创建线程”命令来指定线程函数。 2. 传递参数:当创建线程时...

    多线程的处理

    在标题“多线程的处理”中,我们可以理解为这是一个关于如何设计、实现和管理多线程应用的讨论。描述提到了“多线程例子”,表明我们将探讨一个具体的实例,这个实例包含有详细的注释,帮助我们理解代码的运行机制。...

    易语言多线程框架图

    通常在多线程任务中,需要让每个线程知道自己负责的工作部分,从而合理分配任务。 4. 线程启动和执行:在多线程框架中,程序需要启动每个线程,并将线程索引传入。这样每个线程在执行时便知道自己的责任和任务。 5...

    delphi多线程精品示例

    在单线程应用中,所有任务都在同一执行流中按顺序进行,而在多线程应用中,多个线程可以并发运行,从而实现并行处理。 Delphi中的多线程实现主要依赖于`System.Classes`和`System.Threading`这两个单元。`TThread`...

    C++多线程 最简易的多线程程序

    在C++编程中,多线程是一种常见的技术,它允许程序同时执行多个任务,从而提高程序的并发性和效率。在本“C++多线程 最简易的多线程程序”中,我们将探讨如何使用C++11及更高版本提供的线程库来创建和管理线程。这个...

    稳定、方便、实用的VB6多线程技术(附老马的ActiveX多线程示例)

    多线程在VB6中的应用通常涉及以下几个关键点: - **线程创建**:使用API函数创建新线程,分配资源,并启动执行。 - **线程同步**:为了避免多个线程间的冲突,需要使用Mutex、Semaphore、Event等同步对象来协调线程...

    多线程demo程序-轻松掌握多线程技术

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在服务器端开发和高并发应用中,多线程能够充分利用CPU资源,提高程序的运行效率。这个名为"多线程demo程序-轻松掌握多线程技术"的项目,旨在帮助开发者理解...

    多线程与循环队列

    在多线程环境下,循环队列的应用主要体现在以下几个方面: 1. **线程间通信**:循环队列可以作为线程间的共享数据结构,用于传递消息或者任务。线程A可以将任务放入队列,线程B则从队列中取出并执行。这种方式避免...

Global site tag (gtag.js) - Google Analytics